我在Django项目中有一个简单的搜索应用程序,可以在CMS管理员中搜索 . 这是生成URL的表单:
< form method="get" action="/search">
< p>< label for="id_q">Search:
< input type="text" name="q" id="id_q" />
< input type="submit" value="Submit" />< /p>
,这是URL:
(r'^search/$', 'search.views.search'),
这是视图:
def search(request):
query = request.GET['q']
results = FlatPage.objects.filter(content__icontains=query)
template = loader.get_template('search/search.html')
context = Context({ 'query': query, 'results': results })
response = template.render(context)
return HttpResponse(response)
,这是模板:
< html>
< head>
< title>Search page
< /head>
< body>
< p>You searched for "{{ query }}"; the results are listed below.< /p>
< ul>
{% for page in results %}
< li>< a href="{{ page.get_absolute_url }}">{{ page.title }}< /a>< /li>
{% endfor %}
< /ul>
< /body>
< /html>
但我一直收到此错误:
"Key 'q' not found in < QueryDict: {} >"
. 有谁为什么,我该怎么办?
3 回答
据推测,在您提交搜索词之前首次请求页面时会发生此错误 - 很明显,请求中找不到
q
字段 . 你只需要先检查一下:当您在提交中发布结果时,您正在使用request.GET . 使用Daniel提到的检查并使用POST代替:
您可以将行从
query = request.GET['q']
更改为query = request.GET.get('q')
注意
get()
功能......当然其他答案也适用 . 看到这个类似的问题:'instancemethod' object has no attribute 'getitem'