用django反向传递查询参数?

时间:2014-09-16 09:16:10

标签: django

我有一个可以像

一样访问的网址
/people/raj/updates
/people/raj/updates?tag=food

但Django反向URL解析器似乎没有提供tag=food,即将其作为额外参数检测并放入查询字符串。

如何传递查询参数?

2 个答案:

答案 0 :(得分:2)

这取决于您是在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>

答案 1 :(得分:2)

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

您当然可以通过例如在模板中附加参数来创建网址,如下所示:

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

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

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

这样您就可以在视图中检查kwarg标记。