我想在每个页面顶部的导航栏中集成一个搜索框(嘿,这个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?
答案 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)
使用表单权力
def ProductsPage(request):
search_form = NavSearchForm(request.GET)
if search_form.is_valid():
....