Django简单URL映射问题

时间:2017-07-21 12:19:38

标签: django django-urls

有一个小问题,想知道是否有人可以帮助我。

我有一个像这样的文本搜索框

        <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')

知道它可能是什么吗?

由于

1 个答案:

答案 0 :(得分:2)

你误解了?P在正则表达式中的含义。它声明该组是一个命名组,它被捕获并通过关键字参数发送到视图。满足该正则表达式的URL是这样的:

/library/search/harrypotter/

但这根本不是你想要的搜索;你想要的东西就像你创造的那样,即library/search/?P=harry+potter。为此你只需要一个没有参数的URL:

r'^search/$'

并在视图中获取数据:

query = request.GET['p']

虽然您可能希望使用q而不是p