Django自定义模板标记未被执行

时间:2017-09-01 18:25:35

标签: django

我有一个自定义模板标记,如下所示:

{% 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变量为空。

可能会发生什么想法?

1 个答案:

答案 0 :(得分:1)

好的,我在发表前就发现了。想分享以防其他人被此咬伤。

显然,标签需要包含在它们正在使用的同一块中。找不到任何相关的文档。因此,如果模板看起来像这样:

{% extends 'forms/base_template.html' %}

{% load mytags %}

{% block additional_info %}
{% mytag user 'hello' as greeting %}
{{ greeting }}
{% endblock %}

它将按预期工作。然而,{% mytag %}调用现在包含在块内。

更新:在文档中找到some relevant info(隐藏的类型)。

  

上下文中的变量范围

     

上下文中设置的任何变量只能在分配它的模板的同一块中使用。这种行为是故意的;它为变量提供了一个范围,以便它们不与其他块中的上下文冲突。