Django: テンプレートの使い方

Django 4 の基礎(入門編)

日付:2025年2月18日

目 次

はじめに

Django 4 では、よりシンプルな構文でテンプレートを活用できます。
Django のテンプレートエンジンを使うと、HTML を動的に生成し、効率的に管理できます。
本記事では、Django 4 のテンプレートの基本構造と、変数、フィルタ、テンプレートタグの使い方を解説します。

1. テンプレートとは?

Django のテンプレートは、HTML 内で Python のデータを動的に埋め込むための仕組みです。 templates/ ディレクトリ内にテンプレートファイルを作成し、ビューと連携して使用します。

基本的な流れ

  1. ビュー関数でデータを準備
  2. render() を使ってテンプレートにデータを渡す
  3. テンプレート内で変数や制御構文を利用

2. テンプレートの設定(Django 4)

プロジェクトの settings.py にテンプレートディレクトリを追加します。

PYTHON
from pathlib import Path BASE_DIR = Path(__file__).resolve().parent.parent TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR / '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', ], }, }, ]

ポイント

  • 'DIRS': [BASE_DIR / 'templates']templates/ ディレクトリを指定
  • 'APP_DIRS': True を設定すると base/templates/ も自動的に検索対象になる

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

まず、base/templates/ ディレクトリを作成し、その中に home.html を作成します。

HTML
<!-- base/templates/home.html --> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <title>ホームページ</title> </head> <body> <h1>ようこそ {{ user_name }} さん!</h1> </body> </html>

4. ビューでテンプレートを使用

views.pyrender() を使ってテンプレートを表示します。

PYTHON
from django.shortcuts import render def home_view(request): context = {'user_name': '太郎'} return render(request, 'home.html', context)

ポイント

  • context に渡したデータ (user_name) が {{ user_name }} でテンプレートに埋め込まれる

5. テンプレートタグの基本

Django のテンプレートでは、ロジックを記述するための「テンプレートタグ」を使用できます。

条件分岐 (if)

HTML
{% if user_name %} <p>こんにちは、{{ user_name }} さん!</p> {% else %} <p>ゲストとして閲覧中</p> {% endif %}

ループ (for)

HTML
<ul> {% for item in items %} <li>{{ item }}</li> {% endfor %} </ul>

テンプレートフィルタ

フィルタ説明
{{ text | lower }}小文字に変換
{{ text | upper }}大文字に変換
{{ list | length }}リストの長さを取得

6. テンプレートの継承

複数のページで共通のレイアウトを作成する場合、テンプレートの継承を使います。

親テンプレート (base.html)

HTML
<!-- base/templates/base.html --> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <title>{% block title %}サイトタイトル{% endblock %}</title> </head> <body> <header> <h1>サイト共通ヘッダー</h1> </header> <main>{% block content %}{% endblock %}</main> </body> </html>

子テンプレート (home.html)

{% extends 'base.html' %} {% block title %}ホームページ{% endblock %} {% block content %} <h1>ようこそ {{ user_name }} さん!</h1> {% endblock %}

メリット

  • base.html に共通レイアウトを記述し、各ページで extends を使うことで管理が楽になる
  • block タグを使って、ページごとに異なるコンテンツを挿入可能

7. まとめ

  • Django 4 のテンプレートエンジンを使うと、HTML を動的に管理できる
  • render() を使ってビューからデータを渡し、テンプレートで {{ 変数 }} を表示できる
  • {% if %} や {% for %} を使って条件分岐やループ処理が可能
  • テンプレートの継承を使うと、共通レイアウトを効率的に管理できる