Как повторить блок в шаблоне jinja2?

Я использую Jinja2 в качестве механизма шаблона для статического HTML-сайта, созданного с помощью Python script.

Я хочу повторить содержимое блока в шаблоне макета, который выглядит примерно так:

<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 интерпретирует второй {% block title %} в layout.html как переопределение блока.

Как я могу повторить содержимое блока в том же шаблоне с помощью jinja2?

Ответ 1

Используйте специальную переменную self для доступа к блоку по имени:

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