7. シンプルなテンプレートを使ったページの表示

7.1. views.pyの編集

まずはシンプルなHTMLを表示するだけのトップ画面の処理を作っていきましょう。

self_order/views.py を編集します。

self_order/views.py:

from django.shortcuts import render

def index(request):
    '''セルフオーダーのトップページ'''
    return render(request, 'index.html')

index はPythonの関数です。引数 request はDjangoフレームワークから渡されてくるHTTPリクエストを抽象化したPythonのオブジェクトです。

render 関数は、Djangoでテンプレートファイルを使ってHTTPレスポンスを生成するショートカット関数です。

7.2. テンプレートフォルダの作成と有効化

プロジェクトフォルダである self_order_system の中に templates というフォルダを作成します。

この templates フォルダにDjangoのテンプレートファイルを作成していきます。

テンプレートファイルの検索対象のフォルダとするため、 settings.pyTEMPLATES を変更します。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            BASE_DIR / 'templates',  # プロジェクトフォルダ内のtemplatesをテンプレートフォルダにする
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

Tip

テンプレートファイルを配置するフォルダについてはいろいろな流派があります。Djangoアプリケーション内に配置する、プロジェクトフォルダの外側に配置するなど...

ここでは1つのフォルダ以下に一旦テンプレートファイルをまとめるため、新たに作成した templates フォルダを使うことにしています。

7.3. テンプレートファイルの作成

HTMLを生成するためのテンプレートファイルとして最初に2つ作成します。

templates/base.html:

<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>{% block page_title %}{% endblock %}</title>
  </head>
  <body>
    <h1>{% block title %}タイトル{% endblock %}</h1>
    <div>
      {% block content %}コンテンツ{% endblock %}
    </div>
  </body>
</html>

templates/index.html:

{% extends 'base.html' %}

{% block page_title %}ブラウザに表示されるタイトル{% endblock %}

{% block title %}h1タグ内のタイトル{% endblock %}

{% block content %}
<p>divタグ内のコンテンツ</p>
{% endblock %}

index.html から base.html を利用しています。 {% extends 'base.html' %} という記述に注目してください。Djangoの テンプレート継承 機能を使っています。

index.html は、 base.html の内容を流用しつつ、 {% block ... %}{% endblock %} の部分だけを書き換えたテンプレートファイルである、という意味になっています。

Tip

テンプレート継承とレンダリング結果のイメージ図:

_images/django-template-extends.png

7.4. urls.pyの作成とプロジェクトルートのURL設定

トップページのURL設定を準備します。

self_order フォルダの中に urls.py という名前のファイルを新規作成します。

self_order/urls.py:

from django.urls import path
from . import views

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

この self_order アプリケーションのURL定義をプロジェクト内で有効にするため、既存のファイルである self_order_system/urls.py を編集します。

self_order_system/urls.py:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),  # Django管理画面のURL設定(デフォルトで有効)
    path('', include('self_order.urls')),  # self_orderのURLを有効化
]

Tip

VSCodeのデバッガーでrunserverを実行中の場合、モジュールの作成途中だとデバッガーがエラーを表示してくることがあります。モジュールを新たに追加していく際には一旦デバッガーは停止しておいたほうが作業がスムーズかもしれません。

7.5. トップページを表示してみる

開発用サーバーを起動して、 http://127.0.0.1:8000/ にアクセスしてみましょう。

_images/top-hello-world.png

テンプレートを使ったHTMLの表示ができました。