在Django中进行导航栏搜索框的最佳方法是什么?

时间:2009-10-23 01:20:35

标签: django search-box

我想在每个页面顶部的导航栏中集成一个搜索框(嘿,这个StackOverflow页面顶部有一个我正在谈论的例子)。

也许nav.html可能看起来像:

<ul id="menu">
    <li><a href="/products"></li>
    <li><a href="/service"></li>
    <li>{{ nav_search_form.as_p }}</li>
</ul>

也许forms.py可能包含:

class NavSearchForm(forms.Form):
  query = forms.CharField(max_length=30, required=False)

根据DRY原则,我不希望views.py在每个页面上寻找'查询',如:

def ProductsPage(request):
    search_form = NavSearchForm()
    if request.GET.has_key('query'):
        query = request.GET['query'].strip()
    # deal with 'Products' here...

def ServicePage(request):
    search_form = NavSearchForm()
    if request.GET.has_key('query'):
        query = request.GET['query'].strip()
    # deal with 'Service' here...

我已经可以轻松编写一个能够处理搜索查询并显示结果的页面。如何最好地提取搜索词并将用户引导到该搜索页面(返回HttpResponseRedirect('/ results /?query ='+ query))而不在每页上删除request.GET?

3 个答案:

答案 0 :(得分:3)

让搜索表单对您的常用搜索网址执行GET操作。

<form action="/search/" method="get">
...
</form>

如果您不想硬连接URL,请使用URL反向查找工具...

<form action="{% url my-search-view %}" method="get">
...
</form>

除非我误解了这个问题,否则听起来好像你认为表格必须得到/发布到加载当前页面的相同URL。

答案 1 :(得分:0)

我们在其中一个网站上使用了Google CSE,它就像您可以获得的一样简单。您可以打开几个功能,但这很简单,您可以获得所有标准的Google Goodness™。

答案 2 :(得分:0)

  1. 使用Joe Holloway建议的单独视图。
  2. 使用表单权力

    def ProductsPage(request):
        search_form = NavSearchForm(request.GET)
        if search_form.is_valid():
            ....