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

Posted

技术标签:

【中文标题】是否可以将查询参数传递给 Django % url % 模板标签?【英文标题】:Is it possible to pass query parameters via Django's % url % template tag?是否可以将查询参数传递给 Django % url % 模板标签? 【发布时间】:2011-06-03 06:06:25 【问题描述】:

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

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

【问题讨论】:

查看this answer 以获取用于呈现查询字符串的简单自定义模板标签。 【参考方案1】:

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

只需将它们添加到末尾:

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

对于 Django 1.5+

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

【讨论】:

嗯,从技术上讲,它们是。根据RFC 1738,HTTP URL 采用以下形式:http://:/?. @naktinis HTTP URL,是的。一个 Django URL,not so much。所以对于“URL”的各种定义,你们都是正确的:P 这不会导致尾部斜杠中断 url,例如 example.com/myview/?office=foobar 而不是 example.com/myview?office=foobar 是的,但那又怎样? 想象一下我想优雅地嵌套查询参数,我该如何实现呢?【参考方案2】:

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

% 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',
)

【讨论】:

不幸的是,这似乎不适用于列表参数 @Arthur 是 Django 的错误吗? 这确实很优雅,但不适用于分页,因为它还会从 GET 参数中再次添加上一页的“page=1”。【参考方案3】:

如果参数是变量,请使用urlencode

<a href="% url 'myview' %?office= some_var | urlencode ">

否则空格等特殊字符可能会破坏您的网址。

文档:https://docs.djangoproject.com/en/3.0/ref/templates/builtins/#urlencode

【讨论】:

这对我不起作用.. some_var 变量在 href 中返回空,但如果在模板中的其他地方使用则显示为已填充。 v2.1 @geoidesic 感谢您的报告,如果您发现进一步的重大提交/版本发行说明,或者设法在 1.9 上重现,请告诉我。【参考方案4】:

首先,一个愚蠢的答案:

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

一个严肃的回答者:不,你不能。 Django 的 URL 解析器只匹配 URL 的 path 部分,因此% url % 标签只能反转 URL 的那部分。

【讨论】:

确实如此。这也是有道理的......我只是希望它比这更优雅一点。 您总是可以编写更优雅的自定义标签 - 例如 % qpurl myview office=foobar %。这也可以处理这些值并对其进行适当的编码。【参考方案5】:

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

% url 'some-url-name' foobar %

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

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

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

【讨论】:

【参考方案6】:

试试这个:

% url 'myview' office=foobar %

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

【讨论】:

以上是关于是否可以将查询参数传递给 Django % url % 模板标签?的主要内容,如果未能解决你的问题,请参考以下文章

如何在django中将多个参数传递给url

将参数传递给 Django CreateView

将 url 参数传递给 ListView 查询集

django 将参数传递给模板标签中的函数

如何将查询url参数传递给twig模板

nginx - 将请求标头变量作为查询参数传递给上游 URL