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

标签 python django

根据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

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

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

然后像

一样引用它
<form action="{{ action_url }}"> ... </form>

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

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

return URLNode(viewname, args, kwargs, asvar)

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

最佳答案

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

参见 simple_tag section 的最后一段文档。

关于python - 如何将变量注入(inject)到 Django 模板的上下文中,类似于内置 'as' 标签的 'url' 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50264609/

相关文章:

python - Pandas:更改某一特定列的多级列名称

python - 月份开始日期和结束日期

python - args 在 python 中被映射到 kwargs

python - 在 python 中解码编码的 JSON 结果

django - 使用 Django 的默认存储时,您应该/可以关闭()打开的文件吗?

python - Django 应用程序中的 datetime.now() 变坏了

python - 使用 OpenCV 2.3 和 Python 跟踪两种不同的颜色

python - CommandError : Can't find xgettext. 与 django i18n

database - Django 测试无法初始化数据库,但我可以

django - 当该行已经用单引号括起来时,如何转义 trans 中的单引号?