我正在为我的项目使用django。以下是我创建的用于获取查询建议的视图:
def query_suggestions(request):
if request.GET.has_key('term'):
cols = Col.objects.filter(name__istartswith = request.GET['term'])[:3]
fes = Fe.objects.filter(name__istartswith=request.GET['term'])[:3]
users = User.objects.filter(first_name__istartswith=request.GET['term'])[:3]
json_str = ""
if users:
json_str = json.dumps([{'label': user.first_name, 'value': '/'+ user.username + '/'} for user in users])
if cols:
json_str += json.dumps([{'label': col.name, 'value': col.get_absolute_url()} for col in cols])
if fes:
json_str += json.dumps([{'label': fe.name, 'value': fe.get_absolute_url()} for fe in fes])
return HttpResponse(json_str)
return HttpResponse()
这个脚本使用jQuery进行自动完成:
$("#header-search-input").autocomplete({
source: "/query_suggestions/",
focus: function (event, ui) {
$(event.target).val(ui.item.label);
return false;
},
select: function (event, ui) {
$(event.target).val(ui.item.label);
window.location = ui.item.value;
return false;
}
});
因此,输入值m
会返回HttpResponse()
的{{1}}
BUt,这不显示[{"value": "/moni/", "label": "Moni"}, {"value": "/manisha/", "label": "Manisha"}][{"value": "/col/mira/", "label": "Mira"}]
下的自动完成建议。但是,如果我输入search-input-bar
,则会返回mo
以及[{"value": "/moni/", "label": "Moni"}]
下的建议。这是什么原因?
答案 0 :(得分:1)
代码不会生成有效的JSON,您可以从示例中看到:列表之间没有逗号。
您不希望通过连接字符串来生成JSON。相反,在Python中构建列表或dicts,然后在最后转储到JSON:
data = []
if users:
data.append([{'label': user.first_name, 'value': '/'+ user.username + '/'} for user in users])
if cols:
data.append([{'label': col.name, 'value': col.get_absolute_url()} for col in cols])
if fes:
data.append([{'label': fe.name, 'value': fe.get_absolute_url()} for fe in fes])
json_str = json.dumps(data)