本日のお題
本日のお題はdjagoアプリケーションにおけるテンプレートの継承です。
少し理解に時間がかかったので、整理するためにまとめます。
テンプレートの継承とは
テンプレートの継承とは、他のテンプレートファイルを読み込む機能のことです。
これにより共通部分を何度も記述する必要がなくなったりメンテナンスが簡単になったりといういつものやつですね。
継承には、
- 共通の親に不特定多数の子要素を埋め込むパターン
- 一つの子要素が不特定多数の親要素に出張するパターン
の2つがあります。
head要素やヘッダー・フッターなどを共通化しておいてそこに各種テンプレートを埋め込むというのが前者、いくつかのページでサイドバーを使い回すのが後者といった感じですね。
前者の方法を取る際にはdjangoではextendsを、後者ではincludeを用います。
共通の親要素を用いた継承〜extends
複数の子要素で親要素を共有する場合には、親要素子要素に以下のように記述します。
myapp/index.html(子要素)
<!-- extendsを用いて親要素をtemplates以下の相対パスで指定 -->
{% extends "myapp/base.html" %>
<!-- block body ~ endblockまでが、親要素に読み込まれる。 -->
{% block body %}
{% endblock %}
myapp/base.html(親要素)
<html>
<head>....</head>
<body>
<!-- block body ~ endblockの部分に子要素が埋め込まれる。 -->
{% block body %}
{% endblock %}
</body>
</html>
親要素が共通化されている場合には、親と子の両方の編集が必要です。
共通の子要素を用いた継承~include
逆に、子要素が共通化されている場合であれば、親要素の記述のみで大丈夫です。
<!-- includeする子要素を、templates以下の相対パスで指定 -->
{% include "myapp/result.html" %}
とっても簡単ですね。
終わりに
以上が、djangoにおけるテンプレートの継承の仕組みになります。
うまく使って効率化していきたいですね。