読者です 読者をやめる 読者になる 読者になる

Jinja2 のインクルード機能を使ってより DRY に

Jinja2 って、テンプレート内で他のテンプレートを読み込めるんです。テンプレートを共通化する方法は継承だけじゃないんですよ。私も最近調べて知ったんですけどね。

この機能を使えば、ページネーションやデータ一覧みたいな「テンプレート継承を使う程じゃ無いけど複数ページで表示するもの」を上手くまとめることができそうです。

ページネーションなら、

<!--ページネーションは複数のテンプレートで使うので、外部テンプレート化-->

<!--前のページへのリンクを出力-->
{% if page.has_previous %}
<a href="?page={{ page.previous_page_number }}"></a>
{% endif %}

<!--現在のページ番号と総ページ数を出力-->
<span>{{ page.number }} / {{ page.paginator.num_pages }}</span>

<!--次のページへのリンクを出力-->
{% if page.has_next %}
<a href="?page={{ page.next_page_number }}"></a>
{% endif %}

上記のようにテンプレート化して、

<div id="pagination">
    <!--ページネーションを読み込む-->
    {% include "core/render_pagination.html" %}
</div>

で読み込んでやれば、DRY になりますね。