我有两个 Jinja 2 模板,其中第二个模板扩展了第一个模板:
<h1>Some title</h1>
{% block content %}
{% endblock %}
和
{% block content %}
content
{% endblock %}
现在我希望能够在这两个模板之间插入可变数量的“包装器”,其中第二个模板扩展包装器(扩展下一个包装器)*,从而扩展第一个模板。包装可能看起来像这样:
{% block content %}
<div class="wrapper">
{% block content %}
{% endblock %}
</div>
{% endblock %}
我希望这会产生以下呈现的 HTML:
<h1>Some title</h1>
<div class="wrapper">
content
</div>
不幸的是,上面的包装模板在 Jinja 2 中无效,因为块根本不能像这样工作。那么有什么办法可以在 Jinja 2 中做我想做的事情吗?如果没有:还有其他模板引擎可以实现吗?
(请注意,重命名内部块是行不通的,因为我需要能够添加变量数量的包装器。)
{% block content %}
<div class="wrapper">
{{ super() }}
</div>
{% endblock %}
来自 Jinja2 文档:
可以通过调用super来渲染父块的内容。这返回了父块的结果:
您需要为您的块指定唯一的名称。您的问题显然是由于双重使用
content
块造成的。
更简单的方法是在父模板中添加
header
和 footer
块,将其变成:
{% block header %}
<div class="wrapper">
{% endblock %}
{% block footer %}
</div>
{% endblock %}
并让内容按原样阻止。 Jinja 并不关心您的 HTML 格式是否正确。事实上,它不是特定于 HTML 的,因此您可以执行类似的操作(在这种情况下,HTML 效果会很好)。