【问题标题】:Django accepting GET parametersDjango 接受 GET 参数
【发布时间】:2010-05-23 11:01:02
【问题描述】:

可以在这里看到错误:http://djaffry.selfip.com:8080/

我希望索引页接受参数,不管是

mysite.com/search/param_here

mysite.com/?search=param_here

我的 URL 模式中有这个,但我无法让它工作。有什么建议吗?

urlpatterns = patterns('',
        (r'^$/(?P<tag>\w+)', 'twingle.search.views.index'),
    )

【问题讨论】:

    标签: django url parameters


    【解决方案1】:

    首先你在 url 模式中的正则表达式是错误的。

    r'^$/(?P<tag>\w+)'
    

    它说匹配来自

    的所有内容
    • ^ 行首
    • $ 到行尾
    • 有模式命名标签,由行尾后的单词和数字组成

    通常在一行结束后是另一行或 EOF 不内容(除非您使用多行正则表达式并且您不需要这些)。

    行尾应该在标签之后:

    r'^/(?P<tag>\w+)$'
    

    使用查询字符串

    Query strings are not parsed by url reslover.

    因此,如果您的网址格式为:

    http://mysite.com/?query=param_here
    

    将匹配:

    (r'^$', 'twingle.search.views.index')
    

    在这种情况下,您可以像这样访问query 字符串:

    request.GET.get('query', '')
    

    没有查询字符串

    mysite.com/search/param_here 
    

    将匹配:

    (r'^search/(?P<query>\w+)$', 'twingle.search.views.index'),
    

    \w 匹配的所有内容(您应该更改它以适应您的需要)将作为名为@9​​87654331@ 的参数与索引视图函数的请求一起传递。

    两者

    您可以像这样使用这两种 url 模式:

    urlpatterns = patterns('twingle.search.views',
       url(r'^$', 'index'),
       url(r'^search/(?P<query>\w+)$', 'index'),
    )
    

    在本例中,视图如下所示:

    def index(request, query=None)
        if not query:
           query = request.GET.get('query', '')
        # do stuff with `query` string
    

    【讨论】:

    • 我在使用 url(r'^search/(?P&lt;param&gt;\w+)$', 'index') 时遇到错误,语法无效(urls.py,第 9 行)知道为什么吗?
    • 如果你复制/粘贴了我最后一个带有两种模式的 urlpatterns 示例代码,我似乎在第一个 url 模式之后忘记了逗号。我现在已经修好了。
    • 我还编辑了 urlpatterns(重命名为 &lt;param&gt;&lt;query&gt;)以便在视图中使用并添加了视图示例。
    猜你喜欢
    • 2016-10-31
    • 2020-10-30
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    相关资源
    最近更新 更多