Django Template(テンプレート) for文 使い方 リスト、タプル、辞書
更新日:2021年2月1日Django Template(テンプレート) のforループ部分で、リスト、タプル、辞書データの出力方法やその他の使用方法についてまとめです。
Django Template(テンプレート) のforループ出力部分で、リスト、タプル、辞書データの出力方法などについて記載しておきます。
環境:Python3.8.2 Django3.1
・リストデータの一覧出力方法
views.py
def index(request):
context = {'lists': ["データ1", "データ2", "データ3"]}
return render(request, 'template.html', context)
context = {'lists': ["データ1", "データ2", "データ3"]}
return render(request, 'template.html', context)
上記リストの場合、下記で表示できます。
templatesファイル
{% for list in lists %}
{{ list }}
{% endfor %}
{{ list }}
{% endfor %}
・タプルの一覧出力方法
views.py
def index(request):
context = {'tuple': ("データ1", "データ2", "データ3")}
return render(request, 'template.html', context)
context = {'tuple': ("データ1", "データ2", "データ3")}
return render(request, 'template.html', context)
タプルもリストと同じ記述で表示できます。
templatesファイル
{% for list in tuple %}
{{ list }}
{% endfor %}
{{ list }}
{% endfor %}
・辞書の一覧出力方法
views.py
def index(request):
context = {'dict': {"1":"データ1", "2":"データ2", "3":"データ3")}}
return render(request, 'template.html', context)
context = {'dict': {"1":"データ1", "2":"データ2", "3":"データ3")}}
return render(request, 'template.html', context)
辞書の場合は、キーとバリューがあるので、変数を2つ使用します。
templatesファイル
{% for key,value in dict.itmes %}
{{ key }}{{ value }}
{% endfor %}
{{ key }}{{ value }}
{% endfor %}
・リストの一部を表示
sliceフィルタを使用して、一部分だけ表示することができます。
最初の5件(インデックスが0~4)
{% for list in lists|slice:":5" %}
{{ list }}
{% endfor %}
{{ list }}
{% endfor %}
6件目以降(インデックスが5~)
{% for list in lists|slice:"5:" %}
{{ list }}
{% endfor %}
{{ list }}
{% endfor %}
6件目から9件目(インデックスが5~8)
{% for list in lists|slice:"5:9" %}
{{ list }}
{% endfor %}
{{ list }}
{% endfor %}
・リスト、タプル、辞書のデータが空の場合の表示
リストが空の場合、if文でも表示を記述できますが for文では、その後に
empty の記述で空の場合の表示を記述できます。
templatesファイル
{% for list in lists %}
{{ list }}
{% empty %}
データがありませんでした。
{% endfor %}
{{ list }}
{% empty %}
データがありませんでした。
{% endfor %}
html出力
データがありませんでした。
・ループの先頭だけ表示を変更
templatesファイル
{% for list in lists %}
{% if forloop.first %}
先頭データ: {{ list }}
{% else %}
{{ list }}
{% endif %}
{% endfor %}
{% if forloop.first %}
先頭データ: {{ list }}
{% else %}
{{ list }}
{% endif %}
{% endfor %}
・ループの最後だけ表示を変更
templatesファイル
{% for list in lists %}
{% if forloop.last %}
最後のデータ: {{ list }}
{% else %}
{{ list }}
{% endif %}
{% endfor %}
{% if forloop.last %}
最後のデータ: {{ list }}
{% else %}
{{ list }}
{% endif %}
{% endfor %}
以上、テンプレートで、表示するリストの制限や変更をする事ができます。