【问题标题】:Django - simplejson responseDjango - simplejson 响应
【发布时间】:2012-06-12 06:07:46
【问题描述】:

我正在使用 jQuery 自动完成插件 http://www.devbridge.com/projects/autocomplete/jquery/ 在我希望以 json 格式发送响应的 Web 应用程序中提供搜索建议。

Django 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')

Django 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

更新

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" />

如何在 Django views.py 中获取#add-keywords 文本框的值。这工作q = request.POST.get('add-keywords') 吗?

谢谢!

【问题讨论】:

标签: javascript jquery python django jquery-plugins


【解决方案1】:

判断request.is_ajax()返回False

【讨论】:

【解决方案2】:

条件分支

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

例如,如果request.POST.get('q') 结果None 也可能失败为ValueError

另外,试试'/keywords_suggestions/',注意后缀斜线,而不是serviceUrl:'/keywords_suggestions', 行中的'/keywords_suggestions'

【讨论】:

  • 是的,问题从这里开始q = request.POST.get('q')实际上并没有获取到查询值。为什么会这样?我已经完成了文档中显示的 jQuery 代码。
猜你喜欢
  • 2012-05-17
  • 2011-09-21
  • 2011-12-08
  • 2011-07-31
  • 2011-12-28
  • 2016-09-07
  • 2011-01-16
  • 2013-04-29
  • 2012-10-11
相关资源
最近更新 更多