2017-09-01 161 views
0

我有一个自定义模板标签,看起来像这样: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

好的,在我发表之前我就发现了。想分享一下,以防万一有人被此事咬伤。

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

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

{% load mytags %} 

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

它将按预期工作。不包括{% mytag %}调用现在包含在该块内。

UPDATE:在文档中找到some relevant info(种类隐藏)。在上下文

变量范围在上下文的任何变量集将仅在其被分配的模板的相同的块是可用的。这种行为是故意的;它为变量提供了一个范围,以便它们不会与其他块中的上下文发生冲突。

相关问题