Djangoのテンプレート(template)は、Webアプリケーションで生成されるHTMLの骨格を作成し、その中に動的なデータを埋め込むための仕組みです。
このテンプレートシステムを理解することで、PythonのコードとHTMLの間でデータを効率よくやり取りし、見栄えの良いウェブページを容易に作成することが可能となります。
このページでは、Djangoのテンプレートについて、初心者向けに1からわかりやすく整理して解説します。
Djangoを用いたWeb開発を行いたい人であれば、知らないと恥ずかしい超・基本知識の1つです。是非最後までご覧ください。
Django「テンプレート」とは何か?
Djangoのテンプレートとは、Webアプリケーションの画面の骨格を表すHTMLファイルのことを指します。Djangoでは、このテンプレートファイルにPythonのコードから動的に値を受け渡すことで、さまざまな画面を表示させることができます。
テンプレートを使用することで、Webページの見た目(HTML)とロジック(Pythonコード)を明確に分けることができ、コードの整理整頓、保守、再利用を容易にし、チームでの開発をスムーズにすることができます。
それでは、早速テンプレートの基本的な作成方法と、その利用方法を解説していきます。
Djangoテンプレートの基本
DjangoのテンプレートはHTMLファイルの形で保存され、主に2つの部分から成り立ちます。
- HTML
- テンプレートタグ or テンプレート変数
骨格となるHTMLファイルに、変数を埋め込んでおき、その変数にPythonから値を渡して1つの画面を作成するようなイメージ。
このようにテンプレートを利用して、各場面に応じて修正が必要な部分だけをPythonから渡してあげることで、様々な画面を作成できる仕組みがテンプレートです。
Djangoのテンプレート変数とテンプレートタグの使い方を解説します。
Django:テンプレート変数
テンプレート変数は {{ variable_name }}
の形でHTMLファイル内に記述します。ここには、Pythonから受け取った値(文字列、数値、リスト、オブジェクトなど)が挿入されます。
<p>Hello, {{ name }}!</p>
参考 HTML:pタグ
ここでの name
はテンプレート変数です。ここに Python コードから値が渡されれば、その値が表示さる仕組み。
例えば、name
に "John" という文字列が渡されれば、生成されるHTMLは以下のようになります。
<p>Hello, John!</p>
Django:テンプレートタグ
一方、テンプレートタグは {% tag %}
の形でテンプレートに記述され、より複雑なロジックや制御フローをHTMLに組み込むことができます。
テンプレートタグにはさまざまな種類があり、条件分岐({% if %}
、{% else %}
)、ループ({% for %}
)、テンプレートの継承やインクルード({% extends %}
、{% include %}
)など、多くの操作を行うことができます。
例えば、以下のコードでは、item_list
の各要素に対してループを行い、リストの要素をHTMLに挿入しています。
<ul> {% for item in item_list %} <li>{{ item }}</li> {% endfor %} </ul>
参考 liタグ / Pythonのリスト
item_list
はPythonから渡されたリストで、その各要素が item
としてHTMLに埋め込まれます。
例えば、item_list
に ["Apple", "Banana", "Cherry"]
というリストが渡された場合、生成されるHTMLは以下のようになります。
<ul> <li>Apple</li> <li>Banana</li> <li>Cherry</li> </ul>
このように、Djangoテンプレートタグを使うと、HTMLの生成をPythonのコードで制御することができます。
Djangoのテンプレートタグは多種多様。ここで、最も一般的に使用されるタグをいくつか取り上げ、その機能と使い方を表形式で整理しておきます。
テンプレートタグ | 説明 | 使用例 |
---|---|---|
{% for %} 、{% endfor %} | リストの各要素に対してループを行う。 | {% for item in item_list %}<li>{{ item }}</li>{% endfor %} |
{% if %} 、{% endif %} | 条件分岐を行う。 | {% if user.is_authenticated %}Hello, {{ user.username }}.{% endif %} |
{% else %} | if タグまたは for タグと一緒に使用して、条件が満たされなかった場合の動作を定義する。 | {% if user.is_authenticated %}Hello, {{ user.username }}.{% else %}Please log in.{% endif %} |
{% elif %} | if タグと一緒に使用して、複数の条件をチェックする。 | {% if user.is_admin %}Admin{% elif user.is_staff %}Staff{% else %}User{% endif %} |
{% empty %} | for タグと一緒に使用して、リストが空の場合の動作を定義する。 | {% for item in item_list %}<li>{{ item }}</li>{% empty %}<li>No items.</li>{% endfor %} |
{% extends %} | 他のテンプレートを継承する。 | {% extends "base.html" %} |
{% block %} 、{% endblock %} | extends タグで継承されたテンプレートで上書き可能な領域を定義する。 | {% block content %}This is the content.{% endblock %} |
{% include %} | 他のテンプレートを現在の位置に挿入する。 | {% include "header.html" %} |
{% static %} | 静的ファイルへのURLを生成する。 | <img src="{% static "images/logo.png" %}"> |
{% url %} | DjangoのURLパターン名からURLを動的に生成する | <a href="{% url 'homepage' %}">Home</a> |
{% csrf_token %} | CSRF保護のためのトークンを出力する。通常はPOSTフォーム内で使用する。 | <a href="{% url 'homepage' %}">Home</a> |
{% load %} | カスタムテンプレートタグやフィルタを読み込む。 | {% load custom_tags %} |
次の章では、Djangoテンプレートの作成方法について詳しく解説します。
Djangoテンプレートの作成と使用方法
上記の基本知識を踏まえ、早速Djangoテンプレートの作成と使用方法を実際に見ていきましょう。
テンプレート(HTMLファイル)の作成
テンプレートは基本的にはHTMLファイルであり、Djangoプロジェクト内のアプリケーションフォルダにあるtemplates
ディレクトリに保存されます。
例えば、myapp
という名前のアプリケーションがある場合、テンプレートはmyapp/templates/
ディレクトリに配置します。
↓のような簡単なテンプレートを作成してみます。
<!-- myapp/templates/hello.html --> <!DOCTYPE html> <html> <head> <title>Hello Django</title> </head> <body> <h1>Hello, {{ name }}!</h1> </body> </html>
このテンプレートでは、{{ name }}
というテンプレート変数を使用しており、この部分は後でPythonコードから受け取った値に置き換えられます。
テンプレートの使用
Djangoのビューでテンプレートを使用するには、render
関数を使います。この関数は、指定したテンプレートを使用してHTTPレスポンスを生成します。
参考 Pythonの関数とは?
次のコードは、上記のテンプレートを使って"Hello, Django!"と表示するビューの例です。
# myapp/views.py from django.shortcuts import render def hello(request): return render(request, 'hello.html', {'name': 'Django'})
参考 import文 / views.py(ビューとは?)
このビューでは、render
関数を使ってhello.html
テンプレートをレンダリングしています。3つ目の引数{'name': 'Django'}
は、テンプレートに渡すコンテキストとなり、この例ではテンプレート変数{{ name }}
が'Django'に置き換えられます。
以上がDjangoテンプレートの基本的な作成と使用方法です。
Django:テンプレート(template)のまとめ
初めてPython/Djangoを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。
Pythonをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?今すぐ行動したい方は以下の記事をチェック!
読者料典 Python入門:学習カリキュラム ←こちらから!