如何在jinja2模板中重复一个块?

时间:2014-01-05 02:16:32

标签: python templates jinja2

我使用Jinja2作为通过Python脚本生成的静态HTML网站的模板引擎。

我想在布局模板中重复一个块的内容,如下所示:

<html>
<head>
    <title>{% block title %}{% endblock %} - {{ sitename }}</title>
</head>
<body>
    <h1>{% block title %}{% endblock %}</h1>
    <div id="content">
        {% block content %}{% endblock %}
    </div>
</body>
</html>

此模板将在页面模板中进行扩展,如下所示:

{% extends "layout.html" %}
{% block title %}Page title{% endblock %}
{% block content %}
Here goes the content
{% endblock %}

但是,这并不像我预期的那样有效,导致错误:

jinja2.exceptions.TemplateAssertionError: block 'title' defined twice

Jinja将 layout.html 中的第二个{% block title %}解释为块重新定义。

如何使用jinja2在同一模板中重复块的内容?

1 个答案:

答案 0 :(得分:45)

使用special self variable按名称访问该块:

<title>{% block title %}{% endblock %} - {{ sitename }}</title>
<!-- ... snip ... -->
<h1>{{ self.title() }}</h1>