是否可以将查询参数传递给 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://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 % 模板标签?的主要内容,如果未能解决你的问题,请参考以下文章