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
のあとに変数名
=値