2017-09-01 101 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(種類隱藏)。在上下文

變量範圍在上下文的任何變量集將僅在其被分配的模板的相同的塊是可用的。這種行爲是故意的;它爲變量提供了一個範圍,以便它們不會與其他塊中的上下文發生衝突。