Djangoでテンプレートを共通化する方法【2選:extends/include】

Djangoでテンプレートを共通化する方法を2つ紹介します。
ひとつは、

CakePHPでいう、
レイアウトとしての共通化
もう一つはエレメントとしての共通化です!

レイアウトとして共通化する方法

サイドバーとかの、全部のページで、同じような場合に使います。

レイアウト側

base.html
<html>
<head>
    <title>{% block title %}{% endblock %}</title>
</head>
<body>
    <img src="{% static 'images/sitelogo.png' %}" alt="Logo">
    {% block content %}{% endblock %}
</body>
</html>

レイアウトになるものは、block 名前 endblockという
のでタグを開いて閉じます。

※開いて閉じるんだダサい!ってちょっとだけ思いました。load_block titleのほうがしっくりくるのなーとか思いましたが、きっとレイアウトのさらにレイアウトとか層が深くなった場合にこっちの方が、納得がいくのかもしれません。

レイアウト呼び出し側

{% extends "base.html" %}

{% block title %}タイトル{% endblock %}

{% block content %}
<h1>このページのコンテンツ</h1>
<span>おはよう僕の世界</span>
{% endblock %}

extendsで呼び出す、ファイルを呼び出します
階層の指定は'./base.html'とか相対パスでできます!
※rootのパスはたしかtemplatesだった気がします。
あとは、同じように、blockを中身ありで書きます。

https://docs.djangoproject.com/ja/4.1/intro/overview/#design-your-templates

エレメントとして共通化する方法

何度も使う、同じパーツを共通化する方法です!

これは簡単です!

{% include './table.html' %}

ファイルを呼び出せばそこに展開されます!

<h1>このページのコンテンツ</h1>
{% include './table.html' %}
<span>おはよう僕の世界</span>

includeに引数を渡す

{% include './table.html' with hoge='test' hoge2='test' %}

withのあとに変数名=

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です