Django 简单 URL 映射问题

Django simple URL Mapping issue

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

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

        <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 没有被正则表达式匹配。如果我从 url 中手动删除 ?P= 它工作正常。

我已经尝试了以下一些组合,但它们也没有用

url(r'^search/(?P(.*)<search_result>[\w|\W.@+-]+)/$', views.search_view, name='search_view')

知道它可能是什么吗?

谢谢

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

/library/search/harrypotter/

但这根本不是您想要的搜索结果;您想要与您创建的类似的东西,即 library/search/?P=harry+potter。为此,您只需要 URL 不带参数:

r'^search/$'

并获取视图中的数据:

query = request.GET['p']

尽管您可能想使用 q 而不是 p