我有一个自定义模板标记,如下所示:
{% extends 'forms/base_template.html' %}
{% load mytags %}
{% mytag user 'hello' as greeting %}
{% block additional_info %}
{{ greeting }}
{% endblock %}
我的标签是这样的:
from django import template
register = template.Library()
@register.assignment_tag(takes_context=False)
def mytag(user, what_to_say):
return "{what_to_say} {user}".format(
what_to_say=what_to_say,
user=user.name
)
但代码永远不会执行,greeting
变量为空。
可能会发生什么想法?
答案 0 :(得分:1)
好的,我在发表前就发现了。想分享以防其他人被此咬伤。
显然,标签需要包含在它们正在使用的同一块中。找不到任何相关的文档。因此,如果模板看起来像这样:
{% extends 'forms/base_template.html' %}
{% load mytags %}
{% block additional_info %}
{% mytag user 'hello' as greeting %}
{{ greeting }}
{% endblock %}
它将按预期工作。然而,{% mytag %}
调用现在包含在块内。
更新:在文档中找到some relevant info(隐藏的类型)。
上下文中的变量范围
上下文中设置的任何变量只能在分配它的模板的同一块中使用。这种行为是故意的;它为变量提供了一个范围,以便它们不与其他块中的上下文冲突。