Jinja2の継承とインクルード
Jinja2は継承しか知らないまま使ってきたが、includeという便利なものがあることを知った。
参考: Jinja2 のインクルード機能を使ってより DRY に - present
Jinja2のextendsでは、
<div class="content1">
{% block content1 %} {% endblock %}
</div>
<div class="content2">
{% block content2 %} {% endblock %}
</div>
のように、テンプレートを切り分けて表示しようとすると、うまくいかない。 Flaskの呼び出しでは、
render_template("content2.html", args)
のようにするしかなく、このままではcontent1の内容が表示されない。そこでincludeを利用する。
<div class="content1">
{% include "content1.html" %}
</div>
<div class="content2">
{% include "content2.html" %}
</div>
のようにして、このhtmlファイルの名前でrender_templateすればいい。
render_template("main.html", args)
includeを使えば、ページネーションなどの一部分だけ動的に変更したいという希望が容易に達成できる。
Jinja2のdocを読もう。



コメント