1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Python初心者によるDjango超入門!その3 テンプレートファイルの継承機能を使ってみた

Last updated at Posted at 2020-08-11

本記事について

UdemyでDjangoについて学習した結果のアウトプットページです。
前の記事の続きになります。
今回は、Djangoのテンプレートファイルの継承機能を使ってみようと思います。

#urls.py
今回はテンプレートファイルの継承機能の説明になるため、ulrs.pyは前回と同じです。

first\myapp\urls.py
from django.urls import path
from . import views

app_name = 'myapp'

urlpatterns = [
    path('', views.index, name='index'),
]

views.py

views.pyも前回と同じですが、念のためコードは下記になります。

first\myapp\views.py
from django.shortcuts import render

def index(request):
    context = {
        'names':['鈴木','佐藤','高橋'],
        'message':'こんにちは。',
    }
    return render(request, 'myapp/index.html', context)

ベースとなるHTMLファイルを作る

継承元となるHTMLを作ります。
作成場所は、前回作ったindex.htmlの1個上のフォルダになります。
同じフォルダではないので注意してください。
image.png

作成出来たら以下のコードを記入します。

first\myapp\templates\base.html
<html>
    <head>
        {% block title %}
            <title>継承元ページ</title>
        {% endblock %}
    </head>
    <body>
        <h1>Django勉強ページです</h1>
        <div>
            {% block body %}
            {% endblock %}
        </div>
    </body>
</html>

ポイントは2つ。
head部分に{% block title %}{% endblock %}を記入することと、
body部分に{% block body %}{% endblock %}と記入することです。
次は継承先となるindex.htmlを編集しましょう。

継承先テンプレートファイル(index.html)の編集

前回の記事でも作りましたが、ファイルの場所は下記になります。
image.png

ファイルを開いて、以下のように記述します。

first\myapp\templates\myapp\index.html
{% extends "base.html" %}

{% block title %}
    <title>Django勉強ページ</title>
{% endblock %}

{% block body %}
    <p>{{ names.0 }}さん。{{ message }}</p>
    <p>{{ names.1 }}さん。{{ message }}</p>
    <p>{{ names.2 }}さん。{{ message }}</p>

    <hr>

    {% for name in names %}
        <p>{{ name }}さん。{{ message }}</p>
    {% endfor %}
{% endblock %}

コードの解説です。
まず、{% extends "base.html" %}で先ほど作成したテンプレートファイルを継承します。よくやるミスが間違った場所にbase.htmlを置いてしまいエラーになるケースです。

続いて、{% block title %}{% endblock %}の中にtitleタグを入れています。
これは、index.htmlページ独自のタイトルを入れる意味になります。
index.html以外にhtmlページを作成し、違うタイトルにしたい場合などに役に立ちます。
何も記入しないと、base.htmlにあるtitleが反映され「継承元ページ」と表示されます。

続いて、前回作成したbody部を丸ごと{% block body %}{% endblock %}で囲みます。
これもtitleと同じです。index.htmlページ独自のbodyを記述するという意味です。

その外にもよくやるのがナビ部分を継承させたり、フッター部分を継承させたりします。
継承機能を利用することで、ページの一部に変更があっても全体に反映がさせやすくなります。
Djangoには色々な機能がありますが、継承機能は必ず利用する機能だと思います。

動作確認

py manage.py runserverで開発用サーバーを起動し、動作確認します。
base.htmlにだけ記入した「Django勉強ページです」と記載され、
ページタイトルが「Django勉強ページ」と表示され、
body部が正常に表示できていれば成功です。
image.png

次の記事

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?