使用Django Haystack设置搜索页面需要输入他们的URLconf片段 url(r'^search/', include('haystack.urls'))
. 但是,这意味着(至少从我对Django / MVC的基本理解),没有简单的方法来传递额外的上下文(即额外的字典键/值)来呈现到页面上 .
特别是,我想自定义一个搜索字段来镜像从GET请求传递到页面的变量:
<form method="get" action=".">
<input type="text" name="q" value="">
<!-- result html here -->
</form>
假设参数 ?q=twitter
作为GET请求的一部分附加到URL;我想让 value
选择器等于 twitter
. 如果我控制了视图,我可能会这样做:
if request.method == 'GET':
q = request.GET['q']
return render(request, 'template.html', {'q': q})
然后使用 q
作为HTML <input>
中 value
选择器的值 .
除了编辑Haystack源之外,有没有办法以简单的方式完成这个任务?
3 回答
您可以 sub-class Haystack View添加到上下文中:
在搜索应用中创建
views.py
文件(如果没有) . 然后确保导入Haystack视图 . 然后你可以像这样创建一个子类:不要忘记在搜索应用中更改
urls.py
中视图的路径:干草堆已经通过你的查询 . 模板变量称为查询:
如果在上下文中仍需要更多内容,则必须使用basic_search方法 . 您必须创建视图并调用basic_search . 所以,在views.py中:
您可以根据需要设置更多参数:
奇怪的是,除了extra_context之外,所有这些都可以使用来自url的SearchView()直接调用 . 在urls.py中:
不需要任何参数 . 事件
使用自定义上下文处理器完成此操作:
然后,只需在任何HTML模板中调用
{{ search_query }}
即可 .