Jinja2の中に同じ名前の複数のブロック
質問
Jinja2のので、私はこのようなベーステンプレートを持っています
<title>{% block title %}{% endblock %} - example.com</title>
[...]
<h1>
{% block title %}{% endblock %} - example.com
</h1>
Jinja2のは、それから、次のメッセージで失敗します:
lines = [self.message, ' ' + location]
: block 'title' defined twice
これは私がやろうとしています何のように、今は明白でなければならない - 二つの場所で同じタイトル持っている:実際には他の派生テンプレートで提供されるTITLEタグとH1タグが、タイトルの一部を
どのように1は、一般的にこれを実現するのでしょうか?
解決
こちら、ブロックを定義することでマクロを作成し、文書化されるように特別な「自己」オブジェクト内のブロックの名前:
<title>{% block title %}{% endblock %} - example.com</title>
[...]
<h1>
{{ self.title() }} - example.com
</h1>
他のヒント
アイデアはマクロの内部ブロックを作成し、マクロを2回呼び出す代わりに「ブロック」タグを有するとすることで二回繰り返した。
最新Jinja2のバージョンでこの作品ます:
layout.html の
{%- extends "base.html" -%}
{%- macro duplicated() -%}
{% block overrideninchild %}{% endblock %}
{%- endmacro -%}
{% block base_content %}
{{ duplicated() }}
{{ duplicated() }}
{% endblock %}
のchild_page.html の
{%- extends "layout.html" -%}
{% block overrideninchild %}
Should be visible twice.
{% endblock %}
所属していません StackOverflow