2009-10-23 72 views
2

我想有一个搜索框集成到每个页面顶部出现的导航栏(嘿,这是我在这个StackOverflow页面顶部的那个例子)。Django中的导航栏搜索框的最佳做法是什么?

也许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... 

我有和可以轻松地编程一个页面,将处理搜索查询和显示r esults。如何最好地提取搜索条件并将用户引导至该搜索页面(返回HttpResponseRedirect('/ results /?query ='+ query)),而无需在每个页面上剥离request.GET?

回答

3

只需在搜索表单上对您的常用搜索网址进行GET即可。

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

使用URL反向查找设施,如果你不想硬连线网址...

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

除非我误解了这个问题,听起来也许你认为形式有获取/张贴到加载当前页面的相同URL。

+0

相应的调整,如果你正在使用的,而不是一个“静态”的形式提交的Javascript。 – 2009-10-23 01:31:10

+0

+1。如果您愿意,也可以为POST发挥作用。 – 2009-10-23 08:08:28

+0

@Daniel Yep。在搜索的情况下,我更喜欢GET,因为URL可以加书签,通过电子邮件等发送。 – 2009-10-23 12:41:52

0

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

0
  1. Joe Holoway建议使用单独的视图。
  2. 使用形式的电力

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