Python入門 Djangoの使い方(その10)テンプレートの制御文(繰り返し処理)


Python入門 Djangoの使い方(その10)テンプレートの制御文(繰り返し処理)

はじめに

不定期連載のPython入門第24回目です。今回もPythonのWebフレームワーク「Django」を使っていきましょう。PythonのWebフレームワークといえばFlaskやPyramidなどもありますが、最も使われているのはDjangoです。今回はDjangoのテンプレート内での繰り返し処理の記述を学習していきます。それでは早速はじめましょう。

今回の内容:
テンプレートでのfor文の記述。

前提条件:

  • Pythonバージョン:Python3
  • Djangoバージョン:Django1.10.5
  • 実行環境:Windows8
  • ツール:VisualStudioCommunity2015

Djangoテンプレート内でのfor文サンプル

まずはシンプルな「for」文でリストの一覧を表示

'params': ["グー", "チョキ", "パー"]

上記リストを作成した場合、以下のように記述できます。

{% for p in params %}
    {{ p }}
{% endfor %}

次にタプルの一覧を表示

'params': ("グー", "チョキ", "パー")

上記タプルを作成した場合も、リスト同様に以下のように記述できます。

{% for p in params %}
    {{ p }}
{% endfor %}

次に辞書の一覧を表示

'params':{"a":"apple","b":"banana","c":"cherry"}

上記辞書を作成した場合、以下のように記述できます。
辞書はキーと値があるために、変数を2つ用意します。

{% for k,v in params.items %}
    {{ k }}{{ v }}<br>
{% endfor %}

ここまでが基本のループ文ですね。
では次に少し応用バージョンを見ていきましょう。

リストの中身がない場合に別のメッセージを表示

{% for p in params %}
    {{ p }}
{% empty %}
    params is empty.
{% endfor %}

→paramsが空、未定義の場合、「params is empty」が表示されます。

リストの一部分を表示

sliceフィルタをつけることで、リストの一部を表示することができます。

{% for param in params|slice:"2:4" %}
    {{ param }}
{% endfor %}

→リストのインデックスが2から3(4未満)まで表示されます。

{% for param in params|slice:"2:" %}
    {{ param }}
{% endfor %}

→リストのインデックスが2以降が表示されます。

{% for param in params|slice:":4" %}
    {{ param }}
{% endfor %}

→リストのインデックスが4未満が表示されます。

{% for param in params|slice:":" %}
    {{ param }}
{% endfor %}

→リストが全部表示されます。

ループの最初だけ違う処理を行う。

{% for param in params|slice:":" %}
    {% if forloop.first %}
         This is first time. → {{ param }}<br>
    {% else %}
         {{ param }}<br>
    {% endif %}
{% endfor %}

→最初のループのときだけ、「This is first time. →」が表示されます。

ループの最後だけ違う処理を行う。

{% for param in params|slice:":" %}
    {% if forloop.last %}
         This is last time. → {{ param }}<br>
    {% else %}
         {{ param }}<br>
    {% endif %}
{% endfor %}

→最後のループのときだけ、「This is last time. →」が表示されます。

ループ内でループカウントを取得する。

{% for param in params %}
    index:{{ loop.counter0 }}/
    count:{{ loop.counter }}/
    value:{{ param }}<br>
{% endfor %}

→「loop.counter0」が0からカウントアップするのでループするリストのインデックスとなる。
「loop.couter」は1からカウントアップするのでループした回数となる。

ループ内でループカウントの”逆”を取得する。

{% for param in params %}
    index:{{ loop.revcounter0 }}/
    count:{{ loop.revcounter }}/
    value:{{ param }}<br>
{% endfor %}

→「loop.revcounter0」、「loop.revcouter」はそれぞれ「loop.counter0」、「loop.counter」の逆となる。

まとめ

今回はテンプレート内での繰り返し処理の制御構文を学習しました。DjangoではWhile文があるのか定かではありませんが、どうやらなさそうです。Pythonにはあるのですが。。ということで、繰り返し処理をテンプレート内で行い時にはfor文で書きましょう。上記に挙げたように「ある条件の時にはこの処理をする」といった記述もできますので、活用しましょう。

  • このエントリーをはてなブックマークに追加

PAGE TOP