如何将变量注入 Django 模板的上下文中,类似于内置 'url' 标签的 'as' 参数?



根据 https://docs.djangoproject.com/en/2.0/ref/templates/builtins/#url,可以定义一个稍后检索的URL,如下所示:

{% url 'some-url-name' arg arg2 as the_url %}
<a href="{{ the_url }}">I'm linking to {{ the_url }}</a>

在 https://simpleisbetterthancomplex.com/snippet/2016/08/22/dealing-with-querystring-parameters.html 之后,我定义了一个标签relative_url如下所示:

from django import template
from django.utils.http import urlencode
from django.http import QueryDict
register = template.Library()

@register.simple_tag
def relative_url(field_name, value, query_string=None):
url = urlencode({field_name: value})
if query_string:
query_dict = QueryDict(query_string, mutable=True)
query_dict[field_name] = value
url = query_dict.urlencode()
return '?' + url

我想让这个标签与类似于内置url标签的as一起使用,这样我就可以

{% with params=request.GET.urlencode %}
{% relative_url field value params as action_url %}
{% endwith %}

然后像

<form action="{{ action_url }}"> ... </form>

我正在查看 https://github.com/django/django/blob/master/django/template/defaulttags.pyurl标签的 Django 源代码,但我发现它并不容易理解。

我怀疑我需要做的不是返回字符串,而是返回一个URLNode,就像

return URLNode(viewname, args, kwargs, asvar)

其中asvar是注入上下文的变量,但我不确定为每个构造函数参数填写什么。在此示例中,是否有一种简单的方法可以将变量注入上下文中?

您实际上不需要执行任何操作:此功能内置于simple_tag装饰器中。只需按照您在该示例中显示的方式使用它即可。

请参阅文档simple_tag部分的最后一段。

相关内容

  • 没有找到相关文章

最新更新