有一个小问题,想知道是否有人可以帮助我。
我有一个像这样的文本搜索框
<form class="navbar-form navbar-left" role="search" action="/library/search/">
<div class="form-group" style="display:inline;">
<div class="input-group">
<input class="form-control" id="q" name="P" type="text" placeholder="Book Search"">
<span class="input-group-btn">
<button class="btn btn-primary" type="submit"><i class="glyphicon glyphicon-search"></i></button>
</span>
</div>
</div>
</form>
当我输入单词并点击提交时,生成的URL如下所示,
http://127.0.0.1:8000/library/search/?P=Harry+Potter
在URLs.py我有这样的东西
url(r'^search/(?P<search_result>[\w|\W.@+-]+)/$', views.search_view, name='search_view')
但是上面的url与正则表达式语句不匹配。如果我从网址手动删除?P =它可以正常工作。
我尝试了以下某些组合,但它们都无法正常工作
url(r'^search/(?P(.*)<search_result>[\w|\W.@+-]+)/$', views.search_view, name='search_view')
知道它可能是什么吗?
由于
答案 0 :(得分:2)
你误解了?P
在正则表达式中的含义。它声明该组是一个命名组,它被捕获并通过关键字参数发送到视图。满足该正则表达式的URL是这样的:
/library/search/harrypotter/
但这根本不是你想要的搜索;你想要的东西就像你创造的那样,即library/search/?P=harry+potter
。为此你只需要一个没有参数的URL:
r'^search/$'
并在视图中获取数据:
query = request.GET['p']
虽然您可能希望使用q
而不是p
。