テンプレートとは何か
HTMLファイルの中にDjangoテンプレート言語が含まれている場合、それは単なるHTMLファイルではなくなります。このようなファイルをテンプレートと呼びます。
テンプレート言語の分類
変数の利用: {{ }} 構文
Djangoテンプレート内で複雑なデータ構造を処理する鍵はピリオド(.)です。
views.py の例:
def sample_view(request):
username = "サンプルユーザー"
num = 100
list_data = [5, 10, 15]
dict_data = {"名前": "テスト", "年齢": 30}
class User:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
return "こんにちは"
user1 = User("田中", 28)
user_list = [user1]
return render(request, "sample.html",
{
"username": username,
"num": num,
"list_data": list_data,
"dict_data": dict_data,
"user1": user1,
"user_list": user_list,
})
テンプレートファイル
template/sample.html の例:
<h4>変数{{ var }}</h4><hr>
<p>{{ username }}</p>
<p>{{ num }}</p>
<p>{{ list_data.0 }}</p>
<p>{{ dict_data.名前 }}</p>
<p>{{ user1.greet }}</p>
<p>{{ user_list.0.name }}</p>
タグの利用: {% tag %} 構文
タグは `{% tag %}` のような形式で表されます。いくつかのタグは出力を生成し、他のタグは制御フロー(例えば、ループや条件分岐)を管理します。
for タグ
<h3>リストの要素をループして表示</h3><hr>
{% for item in user_list %}
<p>{{ item.name }}, {{ item.age }}</p>
{% endfor %}
if タグ
{% if num > 50 %}
<p>{{ num }}は50より大きいです。</p>
{% elif num == 50 %}
<p>{{ num }}はちょうど50です。</p>
{% else %}
<p>{{ num }}は50未満です。</p>
{% endif %}
フィルターの利用: {{ obj|filter_name:param }} 構文
デフォルト値の設定
<p>デフォルト値: {{ var|default:"値が存在しない場合" }}</p>
文字列長さの取得
<p>文字列の長さ: {{ text|length }}</p>
サイズフォーマット
<p>ファイルサイズ: {{ size|filesizeformat }}</p>
日付のフォーマット
<p>日付: {{ date_var|date:"Y-m-d" }}</p>
スライス操作
<p>スライス結果: {{ long_text|slice:"5:-1" }}</p>
文字列の切り詰め
<p>切り詰め結果: {{ long_text|truncatechars:20 }}</p>