我在我的项目中使用此JQuery自动完成插件http://www.devbridge.com/projects/autocomplete/jquery/。我按照本教程http://tips4php.net/2010/09/ajax-autocomplete-with-jquery-and-php/进行了操作。
自动填充的jQuery代码:
$('#add-keywords').autocomplete({
serviceUrl:'/keywords_suggestions',
minChars:3,
maxHeight:220,
width:280,
zIndex: 9999,
onSelect: function(value, data){ $('#add-keywords').val(value); },
});
来自JQuery Autocomplete的Ajax GET请求没有问题。就好了,如果我在input text
中输入“developer”,那么GET请求网址就会
http://127.0.0.1:8000/keywords_suggestions/?query=developer
我在Django中得到了查询这样的参数:
def kkeywords_suggestions(request):
if request.is_ajax():
q = request.GET.get('query', '')
try:
g = KeywordsModel.objects.filter(keyword__startswith=q).order_by('count')
except KeywordsModel.DoesNotExist:
return HttpResponse("not")
else:
for i in range(1,(len(g)+1)):
s = []
s.append(g[i-1].keyword)
to_json = {
query: q,
suggestions: s,
}
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)
问题出现在request.GET.get('query', '')
。它显示错误
ValueError at /keywords_suggestions/
The view information.views.keywords_suggestions didn't return an HttpResponse object.
UPDATE-1
抱歉,Chrome网络标签中的错误就是这样
Request URL:http://127.0.0.1:8000/keywords_suggestions/?query=web
Request Method:GET
Status Code:500 INTERNAL SERVER ERROR
当我检查该网址时,它显示空白页面。为什么呢?
UPDATE-2
我从视图中删除了request.is_ajax()
。现在我收到了这个错误:
Exception Type: NameError
Exception Value:
global name 'query' is not defined
Exception Location: /home/nirmal/try/information/views.py in keywords_suggestions, line 123
为什么django将query
视为全局名称?这是我试图从网址中获取的那个。
是否有人可以帮助我为自动完成功能制作完美的 HttpResponse ?
谢谢!
答案 0 :(得分:3)
应该是。
to_json = {'query': q, 'suggestions': s}
基本上发生的事情是{query:q ...
python正在寻找变量查询以便在字典中设置密钥,以及字符串查询可能指向的内容,但是没有这样的变量存在而且这样的返回错误...
global name 'query' is not defined
正如错误所述,python正在寻找变量查询,它首先在函数范围内进行本地检查,然后向上移动直到它到达全局范围,如果没有找到则抛出该异常。