搜索 Django 后重定向

Redirect after search Django

你好,我创建了自动完成 seacrh

Javascript

jQuery(function() {
    $("#id_input").on('keyup', function(){
        var value = $(this).val();
        $.ajax({
            url: "{% url 'ajax_autocomplete' %}",
            data: {
              'search': value 
            },
            dataType: 'json',
            success: function (data) {
                list = data.list;
                $("#id_input").autocomplete({
                source: list,
                minLength: 3 
                });       
            }
        });        
    });
  });

查看:

def autocomplete_search(request):
      if request.is_ajax():
            game = None
            try:
                game = Game.objects.get(name=request.GET.get('search', None))
            except:
                pass
            if game is not None:
                result = redirect('games')
            else:    
                queryset = Game.objects.filter(name__startswith=request.GET.get('search', None))
                list = []
                for i in queryset:
                    list.append(i.name)
                data = {
                    'list': list,
                }
                result = JsonResponse(data)
            return result

但是当 game is not None 它只是响应页面 ajax 请求时它没有重定向。但是我想在 game != None 时停止请求并加载我需要的页面。怎么了?

这是因为您将重定向功能分配给一个变量,它不会那样工作。 您只需要在条件的每一端 return。

试试这样:

def autocomplete_search(request):
      if request.is_ajax():
            game = None
            try:
                game = Game.objects.get(name=request.GET.get('search', None))
            except:
                pass
            if game is not None:
                return redirect('games')
            else:    
                queryset = Game.objects.filter(name__startswith=request.GET.get('search', None))
                list = []
                for i in queryset:
                    list.append(i.name)
                data = {
                    'list': list,
                }
                return JsonResponse(data)

thx for karthikr 我接下来是这样做的

def autocomplete_search(request):
      if request.is_ajax():
            game = None
            try:
                game = Game.objects.get(name=request.GET.get('search', None))
            except:
                pass
            if game is not None:
                data = {
                    'redirect': '/link-to-redirect/'
                }
                result = redirect('games')
            else:    
                queryset = Game.objects.filter(name__startswith=request.GET.get('search', None))
                list = []
                for i in queryset:
                    list.append(i.name)
                data = {
                    'list': list,
                }
                result = JsonResponse(data)
            return result

并且jquery改变下一个方式:

        $.get({% url 'ajax_autocomplete' %}, {
                data: $('#search-game').val()
            }, function (response) {
                if (response.redirect !== undefined) {
                    top.location.href=response.redirect;
                } else {
                list = response.list;
                $("#search-game").autocomplete({
                    source: list,
                    minLength: 2
                });
                }
            });