【问题标题】:Pass a query parameter with django reverse?使用 django reverse 传递查询参数?
【发布时间】:2014-09-16 09:16:09
【问题描述】:

我有一个可以访问的网址

/people/raj/updates
/people/raj/updates?tag=food

但是Django反向URL解析器似乎没有规定要做tag=food,就是把它检测为一个额外的参数并放入查询字符串中。

如何传递查询参数?

【问题讨论】:

标签: django


【解决方案1】:

这取决于您是在 python 代码中还是在模板中构建 URL。

在 python 代码中(例如视图):

from django.http import QueryDict

query_dictionary = QueryDict('', mutable=True)
query_dictionary.update(
    {
        'tag': 'food'
    }
)
url = '{base_url}?{querystring}'.format(
    base_url=reverse(my.url.name),
    querystring=query_dictionary.urlencode()
)

在模板中:

<a href="{% url 'my.url.name' %}?tag=food">My Link</a>

您还可以将 QueryDict 对象从视图传递到模板,并在模板中构建 URL 时使用它:

<a href="{% url 'my.url.name' %}?{{ query_dictionary.urlencode }}">My Link</a>

【讨论】:

    【解决方案2】:

    Django 的反向不包括 GET 或 POST 参数。它们不是网址的一部分。

    您当然可以始终创建 url,例如在模板中,附加参数如下:

    {% url 'named_url' %}?tag=food
    

    这样它无论如何都会被附加。另一种方法是构建一个包含可能标记的 url 正则表达式,例如:

    url(r'^/people/raj/updates/(?P<tag>[a-zA-Z0-9]+/)?', yourview())
    

    这样你可以在你的视图中检查 kwarg 标签。

    【讨论】:

      猜你喜欢
      • 2020-10-06
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-19
      • 2020-01-01
      • 2017-08-07
      • 1970-01-01
      相关资源
      最近更新 更多