2012-06-08 2 views
1

Я использую jQuery autocomplete plugin http://www.devbridge.com/projects/autocomplete/jquery/, чтобы предлагать предложения по поиску в моем веб-приложении, где я хочу отправить ответ в формате json.Django - simplejson response

Джанго views.py для отправки предложений отклика:

def keywords_suggestions(request): 
     if request.is_ajax(): 
       suggestions = [] 
       q = request.POST.get('q') 
       try: 
         g = KeywordsModel.objects.filter(keyword__startswith=q).order_by('count') 
       except KeywordsModel.DoesNotExist: 
         return HttpResponse("") 
       else: 
         for i in range(0,len(g)): 
           global suggestions 
           suggestions.append(g[i].keyword) 
           to_json = { 
             "query": q, 
             "suggestions": suggestions 
           } 
         return HttpResponse(simplejson.dumps(to_json), mimetype='application/json') 

Джанго models.py:

class KeywordsModel(models.Model): 
     keyword = models.CharField(max_length=40, blank=False) 
     count = models.IntegerField(max_length=20) 

     def __unicode__(self): 
      return self.keyword 

JQuery код:

$("#add-keywords").keyup(function() { 
    $('#add-keywords').autocomplete({ 
      serviceUrl:'/keywords_suggestions', 
      minChars:3, 
      maxHeight:220, 
      width:280, 
      zIndex: 9999, 
      params: { q: $('#add-keywords').val() }, 
      onSelect: function(value, data){ $('#add-keywords').val(value); }, 
    }); 
}); 

Я получение этого ошибка, когда я печатаю на текстовом поле # add-keywords.

Request URL:http://127.0.0.1:8000/keywords_suggestions/?q=web&query=web 
Request Method:GET 
Status Code:500 INTERNAL SERVER ERROR 

UPDATE

ValueError at /keywords_suggestions/ 
The view information.views.keywords_suggestions didn't return an HttpResponse object. 

UPDATE-2

У меня сомнения в предложения переменной, может быть, глобальные предложения будут иметь проблемы. Правильно ли я это делаю?

Может ли кто-нибудь вести меня, чтобы заставить его работать?

UPDATE-3

<input type="text" id="add-keywords" name="add-keywords" title="e.g. Web developer, Javascript, Musician, Jazz" /> 

Как получить значение # адд-ключевых слов текстовое поле в views.py Джанго. Это работает q = request.POST.get('add-keywords')?

Спасибо!

+1

Перейдите к http://127.0.0.1:8000/keywords_suggestions/?q=web&query=web и вы увидите сообщение об ошибке. – alexn

+0

open firebug -> console -> ctrl F5 -> ошибка в консоли -> щелкните правой кнопкой мыши и откройте в новой вкладке, чтобы увидеть ошибку –

+0

Пожалуйста, проверьте обновленный вопрос. Благодаря! – rnk

ответ

1

суда request.is_ajax() возвращает False

+0

Почему? Не могли бы вы быть более наглядными? – rnk

+0

возможно, это поможет вам. Http: // StackOverflow.com/questions/7755899/django-says-is-ajax-is-false-on-a-jquery-ajax-request – iMom0

+0

, пожалуйста, проверьте обновленный вопрос – rnk

0

Условия ветви

try: 
    g = KeywordsModel.objects.filter(keyword__startswith=q).order_by('count') 
except KeywordsModel.DoesNotExist: 
    return HttpResponse("") 
else: 
    ... 

также может не в ValueError, если, например, request.POST.get('q') результатов None

Plus, попробуйте '/keywords_suggestions/', обратите внимание на суффикс слэш, вместо '/keywords_suggestions' в строке serviceUrl:'/keywords_suggestions',

+0

Да, проблема начинается здесь 'q = request.POST.get ('q') 'На самом деле это не значение запроса. Почему это так? Я выполнил код jQuery, как показано в документации. – rnk

+0

Проверьте обновленный вопрос – rnk