选择性覆盖 Jinja2
Selective Override Jinja2
{% block very_outer_block %}
{%block outer_block%}
<p> "howdy wassup up" </p>
<p>{% block inner_block%} "I want to be overridden" {%endblock%}</p>
{%endblock%}
{%endblock%}
是否可以在 outer_block
上调用 super()
但覆盖 inner_block
?
这样,如果 inner_block
被覆盖为 "Im another text"
,输出将是例如:
<p> "howdy wassup" </p>
<p> "Im another text" </p>
或者如果我们将 inner_block
覆盖为 "Overridden yet again"
所以它将是:
<p> "howdy wassup" </p>
<p> "Overridden yet again" </p>
我的问题是,如果我们在块中定义块,我们可以在 outer_block
上调用 super()
而覆盖 inner_block
吗?
你可以像这样覆盖内部块;该块是否嵌套在其他块中并不重要。只要你不覆盖那些(如果你不重新定义它们会使内部块不存在),它就可以正常工作:
>>> base = '''
{% block very_outer_block %}
{%block outer_block%}
<p> "howdy wassup up" </p>
<p>{% block inner_block%} "I want to be overridden" {%endblock%}</p>
{%endblock%}
{%endblock%}
'''
>>> test = '''
{% extends 'base' %}
{% block inner_block %}Overriding inner only{% endblock %}
'''
>>> env = jinja2.Environment(loader=jinja2.DictLoader({ 'base': base, 'test': test }))
>>> print(env.get_template('test').render().strip('\n'))
<p> "howdy wassup up" </p>
<p>Overriding inner only</p>
{% block very_outer_block %}
{%block outer_block%}
<p> "howdy wassup up" </p>
<p>{% block inner_block%} "I want to be overridden" {%endblock%}</p>
{%endblock%}
{%endblock%}
是否可以在 outer_block
上调用 super()
但覆盖 inner_block
?
这样,如果 inner_block
被覆盖为 "Im another text"
,输出将是例如:
<p> "howdy wassup" </p>
<p> "Im another text" </p>
或者如果我们将 inner_block
覆盖为 "Overridden yet again"
所以它将是:
<p> "howdy wassup" </p>
<p> "Overridden yet again" </p>
我的问题是,如果我们在块中定义块,我们可以在 outer_block
上调用 super()
而覆盖 inner_block
吗?
你可以像这样覆盖内部块;该块是否嵌套在其他块中并不重要。只要你不覆盖那些(如果你不重新定义它们会使内部块不存在),它就可以正常工作:
>>> base = '''
{% block very_outer_block %}
{%block outer_block%}
<p> "howdy wassup up" </p>
<p>{% block inner_block%} "I want to be overridden" {%endblock%}</p>
{%endblock%}
{%endblock%}
'''
>>> test = '''
{% extends 'base' %}
{% block inner_block %}Overriding inner only{% endblock %}
'''
>>> env = jinja2.Environment(loader=jinja2.DictLoader({ 'base': base, 'test': test }))
>>> print(env.get_template('test').render().strip('\n'))
<p> "howdy wassup up" </p>
<p>Overriding inner only</p>