{% %}はDjangoのテンプレートエンジンにおける特別なタグであり、Djangoのテンプレートタグやテンプレートの制御の流れを定義するために使用されます。{% %}タグは、HTMLコード内に挿入され、Pythonのコードを埋め込むことができるため、Djangoのテンプレートを柔軟かつ強力なものにすることができます。
Djangoの{% %}タグには、さまざまな種類があり、以下のような機能を提供します。
- 変数の表示:変数を表示するためのタグで、{{ }}で変数名を囲みます。
- テンプレートタグの使用:テンプレートタグを使用するためのタグで、{% %}でタグを囲みます。
- if文の使用:条件分岐を行うためのタグで、{% if %} {% elif %} {% else %} {% endif %}で条件を囲みます。
- forループの使用:反復処理を行うためのタグで、{% for %} {% endfor %}でループを囲みます。
- テンプレートの継承:テンプレートの継承を実現するためのタグで、{% extends %}や{% block %}などのタグを使用します。
Djangoのテンプレートタグは、HTMLコード内でDjangoの機能を呼び出すための特別なタグで、Djangoが提供する多くの機能を実現するために使用されます。Djangoの代表的なテンプレートタグについていくつか例を挙げながら解説します。
1、include
他のテンプレートを取り込むためのタグで、共通のパーツを分離するために使用されます。例えば、以下のようなコードをテンプレート内に書くことで、header.htmlとfooter.htmlという2つのテンプレートを取り込むことができます。
{% include "header.html" %}
<!-- ここにページの本文を書く -->
{% include "footer.html" %}
2、for
forは、繰り返し処理を行うためのタグで、リストやクエリセットの要素を反復処理するために使用されます。例えば、以下のようなコードをテンプレート内に書くことで、リストitemsを順に表示することができます。
{% for item in items %}
<li>{{ item }}</li>
{% endfor %}
3、if
ifは、条件分岐を行うためのタグで、if文に相当する機能を提供します。例えば、以下のようなコードをテンプレート内に書くことで、ageが20以上の場合には「成人」、未満の場合には「未成年」と表示することができます。
{% if age >= 20 %}
<p>成人</p>
{% else %}
<p>未成年</p>
{% endif %}
4、url
urlは、URLを生成するためのタグで、アプリケーションのURLパターンに基づいて、URLを自動的に生成することができます。例えば、以下のようなコードをテンプレート内に書くことで、app_nameというアプリケーションのindexビューにアクセスするURLを生成することができます。
<a href="{% url 'app_name:index' %}">Home</a>
5、csrf_token
csrf_tokenは、CSRF攻撃からフォームを保護するためのタグで、フォーム内に必要なトークンを生成することができます。例えば、以下のようなコードをテンプレート内に書くことで、CSRFトークンを生成し、フォームに含めることができます。
<form method="post">
{% csrf_token %}
<!-- フォームの内容をここに書く
6、with
withは、変数に別名を付けるためのタグで、長い変数名を短くしたり、テンプレート内で複雑な計算を行った結果を一時的に格納したりするために使用されます。例えば、以下のようなコードをテンプレート内に書くことで、変数valueに別名short_valueを付けることができます。
{% with short_value=value %}
<p>{{ short_value }}</p>
{% endwith %}
7、block/extends
blockとextendsは、テンプレートの継承を実現するためのタグで、複数のテンプレートで共通の部分を一つのテンプレートにまとめることができます。blockは、親テンプレートで置き換えるためのブロックを定義するために使用され、extendsは、親テンプレートを指定するために使用されます。例えば、以下のようなコードをテンプレート内に書くことで、テンプレートの継承を実現することができます。
<!-- base.html -->
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}{% endblock %}</title>
</head>
<body>
{% block content %}
{% endblock %}
</body>
</html>
<!-- child.html -->
{% extends 'base.html' %}
{% block title %}
タイトル
{% endblock %}
{% block content %}
コンテンツ
{% endblock %}
上記の例では、親テンプレートbase.html内に、共通の要素を定義しています。子テンプレートchild.htmlでは、{% extends ‘base.html’ %} を使用して、親テンプレートを継承し、それに加えて固有のコンテンツを定義しています。
以上が、Djangoのテンプレートタグの種類と例文についての簡単な説明です。テンプレートタグは、Djangoの強力な機能の一つであり、HTMLコードとDjangoの機能を柔軟かつ効率的に組み合わせることができます。
8、ifequal/ifequal
ifequal/endifequalは、2つの値が等しいかどうかを比較するためのタグです。例えば、以下のようなコードをテンプレート内に書くことで、変数xと変数yが等しい場合にのみ、メッセージを表示することができます。
{% ifequal x y %}
<p>変数xと変数yは等しい</p>
{% endifequal %}
9、filter
filterは、変数にフィルターを適用するためのタグです。フィルターは、文字列や数値などの値を変換したり、加工したりするために使用されます。例えば、以下のようなコードをテンプレート内に書くことで、変数messageをすべて大文字で表示することができます。
<p>{{ message|upper }}</p>
10、forloop
forloopは、forループ内で使用される特別な変数を指定するためのタグです。例えば、以下のようなコードをテンプレート内に書くことで、forループの現在のインデックスと、ループの長さを表示することができます。
{% for item in items %}
<li>インデックス: {{ forloop.counter }} / ループ長: {{ forloop.counter0 }}</li>
{% endfor %}
これらのタグは、Djangoのテンプレートをより柔軟かつ強力なものにするために使用されます。テンプレートタグをうまく使うことで、HTMLコードとDjangoの機能をシームレスに統合し、高度なWebアプリケーションを簡単かつ効率的に開発することができます。