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

Bri*_*n D 111 django django-templates

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

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

Dan*_*man 156

不,因为GET参数不是URL的一部分.

只需将它们添加到最后:

<a href="{% url myview %}?office=foobar">
Run Code Online (Sandbox Code Playgroud)

适用于Django 1.5+

<a href="{% url 'myview' %}?office=foobar">
Run Code Online (Sandbox Code Playgroud)

  • 嗯,技术上他们是.根据[RFC 1738](http://www.ietf.org/rfc/rfc1738.txt),HTTP URL采用以下形式:http:// <host>:<port>/<path>?<searchpart> . (10认同)

eri*_*eri 30

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

{% url 'order_list' %}?office=foobar&{{ request.GET.urlencode }}
Run Code Online (Sandbox Code Playgroud)

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

from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP

TEMPLATE_CONTEXT_PROCESSORS = TCP + (
    'django.core.context_processors.request',
)
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,这似乎不适用于列表参数 (2认同)
  • 确实很优雅,但不适用于分页,因为它还会从GET参数中再次添加上一页的“ page = 1”。 (2认同)

Cir*_*四事件 22

使用urlencode如果该参数是一个变量

<a href="{% url 'myview' %}?office={{ some_var | urlencode }}">
Run Code Online (Sandbox Code Playgroud)

或者像空格这样的特殊字符可能会破坏您的URL.

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


lqc*_*lqc 8

首先,一个愚蠢的回答:

{% url my-view-name %}?office=foobar
Run Code Online (Sandbox Code Playgroud)

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