是否可以将查询参数传递给Django {%url%}模板标记?

时间:2011-01-04 07:47:01

标签: django django-templates

我想将请求参数添加到{% url %}标记,例如?office=foobar

这可能吗?我找不到任何东西。

6 个答案:

答案 0 :(得分:150)

不,因为GET参数不是网址的一部分。

只需将它们添加到最后:

<a href="{% url myview %}?office=foobar">

对于Django 1.5 +

<a href="{% url 'myview' %}?office=foobar">

答案 1 :(得分:30)

将当前参数与新参数混淆的方法:

{% url 'order_list' %}?office=foobar&{{ request.GET.urlencode }}

将您的设置修改为具有请求变量:

from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP

TEMPLATE_CONTEXT_PROCESSORS = TCP + (
    'django.core.context_processors.request',
)

答案 2 :(得分:18)

如果参数是变量

,请使用urlencode
<a href="{% url 'myview' %}?office={{ some_var | urlencode }}">

或者像空格这样的特殊字符可能会破坏您的网址。

url的文档未提及直接使用url的方法:https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#url

答案 3 :(得分:8)

首先,一个愚蠢的回答:

{% url my-view-name %}?office=foobar

严肃的回答:不,你做不到。 Django的URL解析器仅匹配URL的路径部分,因此{% url %}标记只能反转该部分URL。

答案 4 :(得分:1)

如果您的网址(和视图)包含变量 office,那么您可以像这样传递它:

{% url 'some-url-name' foobar %}

或者像这样,如果你有多个参数:

{% url 'some-url-name' office='foobar' %}

文档:https://docs.djangoproject.com/en/3.1/ref/templates/builtins/#url

答案 5 :(得分:0)

尝试一下:

{% url 'myview' office=foobar %}

对我有用。基本上,它对该链接进行反向操作并应用给定的参数。