【Django】テンプレート:タグとは(タグ一覧・使い方)

時計 2022.01.08 / 時計

【Django】テンプレート:タグとは(タグ一覧・使い方)

本記事ではPythonのWebフレームワークDjangoにおける、テンプレートで利用するタグについて詳しく解説していきます。

タグはテンプレートで条件分岐やループといったロジックを組み込む仕組みです。

テンプレートタグを理解してさまざまな機能を利用できるようにしましょう。

テンプレートとは

Djangoはテンプレートという仕組みを利用してWebページを生成します。

テンプレートとはHTMLをベースとして書かれており、コード内に変数の表示や条件分岐・ループといったロジックを組み込み、動的にWebページの元となるHTMLを生成します。

テンプレートについて詳しくは以下記事をご参照ください。

テンプレートを利用することで以下のことを実現できます。

  • 変数に格納された値・文字列の表示
  • 変数の内容を変更して表示(フィルター)
  • 条件分岐やループなどのロジックの組み込み(タグ)

本記事では上記の中から、テンプレートタグについて詳しく解説していきます。

フィルターについて詳しくは以下記事をご参照ください。

テンプレート:タグとは

テンプレートで利用できるタグは、テンプレート内で繰り返し(forループ)や条件分岐(if文)といった処理やテンプレートの継承(extends)などさまざまな機能を提供しています。

タグは{%…%}で囲んで記述します。

構文

{% <タグ名> <引数> %}

開始タグと終了タグの2つを必要とするタグもあります。開始タグと終了タグの間に表示したいHTMLを記述します。

構文

{% <タグ名> <引数> %}
HTMLなどを記述
{% end<タグ名> %}

テンプレート:タグ一覧

Djangoでは初めからテンプレートで利用できる様々なタグが組み込まれています。またテンプレートタグは自作することも可能です。

ここでは初めから用意されている組み込みタグを紹介していきます。

if, elif, else:条件分岐

ifタグ、elifタグ、elseタグを組み合わせて利用することで、条件による分岐処理をおこなえます。

構文

{% if … %}

{% elif … %}

{% else %}

{% endif %}

ifタグはフィルターを利用することができます。フィルターを組み合わせて利用することで応用が利くようになります。

for:ループ

開始タグ{% for … %}と終了タグ{% endfor %}の間に記述されたプログラムをループさせます。

構文

{% for … %}

{% endfor %}

forループは以下のようにリストの各要素にアクセスして、リストの要素数だけループを回します。

{% for book in books %}
    {{  book.title  }}
    {{  book.price  }}
{% endfor %}

forタグによるループのより詳しい解説は以下記事をご参照ください。

extends, block, include:テンプレートの継承

テンプレートでは全ページで共通する部分を共通テンプレートにまとめます。これにより各ページで共通部分を何度も書く必要がなくなります。

これを「テンプレートの継承」と呼びます。

このテンプレートの継承で利用されるタグが「extendsタグ」、「blockタグ」、「includeタグ」です。

テンプレートの継承について詳しくは以下記事をご参照ください。

comment:コメント

説明文などのコードとは無関係のコメントを無視させたい場合はcommentタグを利用します。

構文

{% comment %}

{% endcomment %}

load:カスタムテンプレートタグの読み込み

loadタグはカスタムテンプレートタグの読み込みをおこないます。

構文

{% load タグ名 %}

基本的にはテンプレートの先頭に記述します。また共有テンプレート(継承元のテンプレート)に記述していた場合でも、自身のテンプレートに記述する必要があります。

staticタグを利用する場合は、必ずloadタグで読み込んでおく必要があります。

static:静的ファイルのURL取得

staticタグは静的ファイルのURL取得に使用されます。静的ファイルとは画像やCSS、Javascriptなどのことです。

構文

{% static ファイルパス %}

テンプレート内で画像を表示する場合は次のように使用します。

<img src="{% static "app/image.jpg" %}" alt="image">

すでに述べていますが、staticタグを利用するにはloadタグでstaticを読み込んでいる必要があります。

{% load static %}

url:URLの逆引き

urlタグはURLconf(urls.py)に記述されたURLパターン名からURLを逆引きします。

構文

{% url URLパターン名 引数 %}

URLパターン名とはURLconfの中でnameで指定された名前です。

path("<int: id>/", views.detail, name="detail")
# この場合urlタグは次のように記載
{% url ‘detail’ id=1 %}

引数には上記のようにURLパターンにパスコンバータや正規表現が含まれている場合に引数に値を指定しURLパターンがマッチするようにします。

csrf_token:CSRF対策

Djangoでフォームを利用した際は必ずcsrf_tokenタグを使用します。

{% csrf_token %}

CSRF(Cross Site Request Forgeries)対策として必ずフォーム内にcsrf_tokenタグを入れるようにしましょう。

now:現在の日時

nowタグは指定したフォーマット文字列に従って現在の日時を表示します。

{% now フォーマット文字列 %}

まとめ

本記事「【Django】テンプレート:タグとは(タグ一覧・使い方)」はいかがでしたか。

ぜひタグの使い方を覚えてテンプレートで利用してみてください。