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

32

我正在使用Jinja2作为静态HTML站点的模板引擎,这个站点是通过Python脚本生成的。

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

<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个回答

57

使用 特殊的self变量来按名称访问块:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接