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

Eli*_*les 21 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>
Run Code Online (Sandbox Code Playgroud)

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

{% extends "layout.html" %}
{% block title %}Page title{% endblock %}
{% block content %}
Here goes the content
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

但是,这不能像我预期的那样工作,导致错误:

jinja2.exceptions.TemplateAssertionError: block 'title' defined twice
Run Code Online (Sandbox Code Playgroud)

金贾解释第二{% block title %}的layout.html作为一个块重新定义.

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

Sea*_*ira 47

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

<title>{% block title %}{% endblock %} - {{ sitename }}</title>
<!-- ... snip ... -->
<h1>{{ self.title() }}</h1>
Run Code Online (Sandbox Code Playgroud)