在 jinja2 中包裹块

问题描述 投票:0回答:3

我有两个 jinja2 模板,其中第二个模板扩展了第一个模板:

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

不幸的是,上面的包装模板在 jinja2 中无效,因为块根本不能像这样工作。那么有什么办法可以在 jinja2 中做我想做的事情吗?如果没有:还有其他模板引擎可以实现吗?

(请注意,重命名内部块是行不通的,因为我需要能够添加变量数量的包装器。)

flask jinja2
3个回答
4
投票
{% block content %}
  <div class="wrapper">
    {{ super() }}
  </div>
{% endblock %}

来自 Jinja2 文档

可以通过调用super来渲染父块的内容。这返回了父块的结果:


0
投票

您需要为您的块指定唯一的名称。您的问题显然是由于双重使用

content
块造成的。


0
投票

更简单的方法是在父模板中添加

header
footer
块,将其变成:

{% block header %}
    <div class="wrapper">
{% endblock %}
{% block footer %}
    </div>
{% endblock %}

并让内容按原样阻止。 Jinja 不关心你的 HTML 是否格式良好,事实上它不是 HTML 特定的,所以你可以做这样的事情(在这种情况下 HTML 会很好)

© www.soinside.com 2019 - 2024. All rights reserved.