如何在任何网址上使用Haystack搜索功能

时间:2014-01-16 16:06:17

标签: django django-haystack

在Haystack教程中,Haystack是为url定义的:

(r'^search/', include('haystack.urls'))

这是否意味着干草堆可用于以/ search / ??

结尾的任何网址

如果是这样,我怎么能在/ search /中没有必要结束的任何网址中实现haystack?例如,我想在www.example.com上实施搜索功能,并且不想创建www.example.com/search/

由于

1 个答案:

答案 0 :(得分:1)

这意味着,假设这是您的根urls.py,您将获得带有{em>启动且/search/的任何网址的搜索视图。您可以放置​​任何要替换的内容r'^search/'

请注意,通常,您的搜索表单显示的网址与实际提供结果的网址存在差异。例如,搜索表单可能位于每个页面上,但搜索结果需要转到您提到的URLconf中的视图。

例如,要在每个页面上放置一个搜索框,您可以在模板中包含搜索表单。它可能是这样的

<form action="/search/" method="get">
{{ mysearchform.as_p }}
<input type="submit" value="Search"/>
</form>

这会将查询发送到绑定到www.example.com/search/的视图,该视图将是您的结果页面。然后,在您的URLconf中,您只需输入

from haystack.views import SearchView
from haystack.forms import SearchForm

...

url(r'^search/', SearchView(form_class=SearchForm))

要使该表单正常运行(例如,当用户获取结果页面时保留搜索项),您可以创建一个上下文处理器,将该表单返回到所有视图中的上下文:

from haystack.forms import SearchForm

def my_search(request):
    form = SearchForm()
    return {'mysearchform': form}

请注意,您必须将上下文中的表单命名为form之外的其他内容,因为它会传递到包含管理界面的每个页面,而form会与管理员登录表单冲突(即您无法登录)。

相关问题