选择性超控Jinja2

2024-10-16 20:39:35 发布

您现在位置:Python中文网/ 问答频道 /正文

{% 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吗?你知道吗


Tags: textanotherblockyetveryinnerouterup
1条回答
网友
1楼 · 发布于 2024-10-16 20:39:35

您可以像这样覆盖内部块;该块是否嵌套在其他块中并不重要。只要不覆盖这些块(如果不重新定义它们,内部块将不存在),它就可以正常工作:

>>> 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>

相关问题 更多 >