2016-07-07 45 views
0

我试着在django中构建jquery自动完成,但它在浏览器中返回此响应“视图rango.views.AutoCompleteView没有返回HttpResponse对象。”我哪里错了?django jquery自动完成不返回结果

在搜索框中

<form id = "aa" class = "form-inline" method = "post" action=""> 

    {% csrf_token %} 
    <input type="text" name = "cat_name" class = "form-control" id = "cat" value = ""/> 
    <input class ="btn btn-sm btn-info" type="submit"/> 

</form> 

的javascript

$(function() { 
    $("#cat").autocomplete({   
    source: "/rango/autocomplete/", 
    minLength:2, 
    }); 
}); 

视图

class AutoCompleteView(FormView): 
def get(self,request,*args,**kwargs): 
    data = request.GET 
    item = data.get("term") 

    if item: 
     cats = Category.objects.filter(name__icontains = item) 
    else: 
     cats = Category.objects.all() 
     results = [] 

     for cat in cats: 
      cat_json = {} 
      cat_json['id'] = cat.id 
      cat_json['label'] = cat.item 
      cat_json['value'] = cat.item 
      results.append(cat_json) 
      data = json.dumps(results) 
      mimetype = 'application/json' 

      return HttpResponse(data,mimetype) 

urls.py

url(r'^autocomplete/$',AutoCompleteView.as_view()) 
+0

这是一个错字还是你的'return'在你的'for'里? – Gocht

+0

你的缩进看起来很糟糕......从结果= []' – karthikr

+0

开始,我认为它是一个错字,我正在学习一个教程。 – brxy

回答

0

请注意,如果您没有request.GET中的“term”或Category型号中的条目,则您的查看返回HttpResponse。尝试用这种缩进重写代码:

class AutoCompleteView(FormView): 
def get(self,request,*args,**kwargs): 
    data = request.GET 
    item = data.get("term") 

    if item is not None: 
     cats = Category.objects.filter(name__icontains = item) 
    else: 
     cats = Category.objects.all() 

    results = [] 

    for cat in cats: 
     cat_json = {} 
     cat_json['id'] = cat.id 
     cat_json['label'] = cat.item 
     cat_json['value'] = cat.item 
     results.append(cat_json) 
    data = json.dumps(results) 
    mimetype = 'application/json' 

    return HttpResponse(data, mimetype) 

怎么看呢不同的,所以您将返回HttpResponse反正。

0

你,所以你需要使用json.dumps()功能,这和你也缩进看起来非常糟糕返回一个列表,不对齐回报for循环内。

return HttpResponse(json.dumps(results)) 

请关注@ valentjedi的回答。