2012-05-01 83 views

回答

2

可以使用普通Template Inheritance

在父定义块(基地)模板作为默认数据的容器。

现在,当您扩展此模板时,您可以决定如何使用此块。 如果您不覆盖该块,则显示默认数据。否则,将显示继承模板的块中的数据。

最后{{ block.super }}为您提供了从基本内容和继承的模板混合选项:如果 要添加到父块的内容,而不是 完全覆盖它

这是非常有用。

0

检查Django的/模板/ defaulttags.py里面内建标签的实现,例如autoescape

# in autoescape() 
# get content from current autoecape to pairing endautoescape 
nodelist = parser.parse(('endautoescape',)) 

# in AutoEsacpeControlNode.render() 
# render inner content 
output = self.nodelist.render(context) 

因此你在您的定制标签中写下如下内容

def render(self, context): 
    ... 
    if extend: 
     return default_content 
    else: 
     return self.nodelist.render(context) 

通常if... else将这样的伎俩也...:

{% if extended %} 
... 
{% else %} 
{{ default }} 
{% endif %}