2016-07-07 10 views
0

私はdjangoでjqueryオートコンプリートを作成しようとしていますが、このレスポンスをブラウザに返します。 "rango.views.AutoCompleteViewビューはHttpResponseオブジェクトを返しませんでした。どこが間違っていますか?django jquery autocompleteが結果を返さない

検索ボックス

<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

あなたのインデントが大きな時間を混乱させているように見えます.. 'results = []'から始まり – karthikr

+0

私はそのタイプミスだと思います、私はチュートリアルに従っていました。 – brxy

答えて

0

request.GETに「用語」がないか、または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()機能を使用する必要があるので、リストを返すと、ループのためのあなたの内部リターンを整列しません。

return HttpResponse(json.dumps(results)) 

@ valentjediの答えに従ってください。

関連する問題