1. TOP
  2. ブログ
  3. Django Template(テンプレート) for文 使い方 リスト、タプル、辞書

Django Template(テンプレート) for文 使い方 リスト、タプル、辞書

更新日:2018年8月24日

django,for文, 使い方,template,テンプレート,リスト,タプル,辞書,python

Django Template(テンプレート) のforループ部分で、リスト、タプル、辞書データの出力方法やその他の使用方法についてまとめです。



Django Template(テンプレート) のforループ出力部分で、リスト、タプル、辞書データの出力方法などについて記載しておきます。

環境:Python3.6.5 Django2.1

・リストデータの一覧出力方法


views.py
def index(request):
    context = {'lists': ["データ1", "データ2", "データ3"]}
    return render(request, 'template.html', context)

上記リストの場合、下記で表示できます。
templatesファイル
{% for list in lists %}
    {{ list }}
{% endfor %}


・タプルの一覧出力方法


views.py
def index(request):
    context = {'tuple': ("データ1", "データ2", "データ3")}
    return render(request, 'template.html', context)

タプルもリストと同じ記述で表示できます。
templatesファイル
{% for list in tuple %}
    {{ list }}
{% endfor %}


・辞書の一覧出力方法


views.py
def index(request):
    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 %}


・リストの一部を表示


sliceフィルタを使用して、一部分だけ表示することができます。

最初の5件(インデックスが0~4)
{% for list in lists|slice:":5" %}
    {{ list }}
{% endfor %}


6件目以降(インデックスが5~)
{% for list in lists|slice:"5:" %}
    {{ list }}
{% endfor %}


6件目から9件目(インデックスが5~8)
{% for list in lists|slice:"5:9" %}
    {{ list }}
{% endfor %}



・リスト、タプル、辞書のデータが空の場合の表示


リストが空の場合、if文でも表示を記述できますが for文では、その後に
empty の記述で空の場合の表示を記述できます。
templatesファイル
{% for list in lists %}
    {{ list }}
{% empty %}
    データがありませんでした。
{% endfor %}

html出力
データがありませんでした。



・ループの先頭だけ表示を変更


templatesファイル
{% for list in lists %}
    {% if forloop.first %}
        先頭データ: {{ list }}
    {% else %}
        {{ list }}
    {% endif %}
{% endfor %}


・ループの最後だけ表示を変更


templatesファイル
{% for list in lists %}
    {% if forloop.last %}
        最後のデータ: {{ list }}
    {% else %}
        {{ list }}
    {% endif %}
{% endfor %}


以上、テンプレートで、表示するリストの制限や変更をする事ができます。
B!

前の記事:Django Template(テンプレート)で ループカウンタ番号を表示

次の記事:Django Template(テンプレート)spaceless、HTMLタグ間の空白、タブ、改行の自動削除