在Django中进行导航栏搜索框的最佳方法是什么?
-
05-07-2019 - |
题
我想在每个页面顶部的导航栏中集成一个搜索框(嘿,这个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?
解决方案
让搜索表单对您的常用搜索网址执行GET操作。
<form action="/search/" method="get">
...
</form>
如果您不想硬连接URL,请使用URL反向查找工具...
<form action="{% url my-search-view %}" method="get">
...
</form>
除非我误解了这个问题,否则听起来好像你认为表格必须得到/发布到加载当前页面的相同URL。
其他提示
我们在其中一个网站上使用 Google CSE ,它就像您一样简单明了得到。您可以打开几个功能,但这很简单,您可以获得所有标准的Google Goodness&#8482;。
- 使用Joe Holloway建议的单独视图。
-
使用表单权力
def ProductsPage(request): search_form = NavSearchForm(request.GET) if search_form.is_valid(): ....
醇>
不隶属于 StackOverflow