2

我想将一个搜索框集成到每个页面顶部的导航栏中(嘿,在这个 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?

4

3 回答 3

3

只需让搜索表单在您的常用搜索 URL 上执行 GET。

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

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

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

除非我误解了这个问题,否则听起来您可能认为表单必须获取/发布到加载当前页面的相同 URL。

于 2009-10-23T01:26:52.530 回答
0

我们在我们的一个网站上使用了Google CSE,它非常简单明了。您可以打开一些功能,但这些功能微不足道,您可以获得所有标准的 Google Goodness™。

于 2009-10-23T02:52:56.083 回答
0
  1. 正如 Joe Holloway 所建议的那样,使用单独的视图。
  2. 使用表格力量

    def ProductsPage(request):
        search_form = NavSearchForm(request.GET)
        if search_form.is_valid():
            ....
    
于 2009-10-23T10:21:01.860 回答