テンプレートの継承
CoddyのDjangoジャーニー「Djangoの基礎」セクションの一部。レッスン 17/23。
home.html と drinks.html では、同じ <head> が繰り返されており、まもなくナビゲーションバーも重複することになります。枠組みを変更するたびに、すべてのファイルを編集することになります。代わりに、1つのテンプレートを枠組みとして使い、各ページがその中身を埋めます。枠組みでは、ページが埋める部分を {% block %} タグと名前で指定します。ライブラリの library/base.html は次のようになります。
<body>
<nav>...</nav>
<article>{% block body %}{% endblock %}</article>
</body>ページの先頭に {% extends %} を記述し、その後でブロックを埋めます。
{% extends "library/base.html" %}
{% block body %}
<p>We are open until 20:00.</p>
{% endblock %}{% extends %} は最初のタグでなければなりません。別のテンプレートを継承するページでは、ブロックの外にあるものはすべて破棄されます。囲むのを忘れた見出しは消えてしまいます。チャレンジ
中級base.htmlで、<main>内にcontentという名前の空のブロックを配置します。home.htmlとdrinks.htmlを"menu/base.html"を継承するようにし、そのブロック内にそれぞれのHTMLを記述します。
Runを押すと、両方のページにbase.htmlのナビゲーションが表示されます。
自分で試してみよう
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Corner Café</title>
</head>
<body>
<nav>
<a href="{% url 'menu:home' %}">Home</a>
<a href="{% url 'menu:drinks' %}">Drinks</a>
<a href="{% url 'menu:about' %}">About</a>
</nav>
<main>
<!-- each page's content goes here -->
</main>
</body>
</html>
Djangoの基礎のすべてのレッスン
自分で練習してみよう: Djangoプレイグラウンド