我有一个可以像
一样访问的网址/people/raj/updates
/people/raj/updates?tag=food
但Django反向URL解析器似乎没有提供tag=food
,即将其作为额外参数检测并放入查询字符串。
如何传递查询参数?
答案 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标记。