[Django] テンプレート内でお手軽にrange関数を利用する
Djangoテンプレートを書いているとテンプレート内でrange
関数が使いたくなることがよくあります。
そんな時にお手軽にrange
関数っぽいことができるようになる小技のご紹介。
rangeもどき
特定の回数ループを回したい。
そんな時には以下の方法を利用すると余計な箇所に変更を加えることなく簡単にrange
関数っぽく利用できます。
{% with ''|center:n as range %}
{% for _ in range %}
<p>繰り返しの要素</p>
{% endfor %}
{% endwith %}
n
部分に繰り返したい回数を指定します。
やっている事としては、
- 空文字列(
''
)をcenter
フィルターに通して引数(n
)で指定した数の半角空白文字列にする。 with
節で 1. で作った半角空白文字列を一時的に変数range
として定義。range
をfor
の対象としてループを回す。
一応、with
節を使わずとも
{% for _ in ''|center:n %}
<p>繰り返しの要素</p>
{% endfor %}
のように書けますが、後からテンプレートを見直した時に何をしているのか分かりづらくなるのでwith
節を利用することをお勧めします。
ループの回数を取得したい
ループの回数を取得したい場合はforloop.counter
を利用すると楽ちんです。
{% with ''|center:n as range %}
{% for _ in range %}
{{ forloop.counter }}
{% endfor %}
{% endwith %}
0
から値を取得したい場合はforloop.counter0
が利用できます。
{% with ''|center:n as range %}
{% for _ in range %}
{{ forloop.counter0 }}
{% endfor %}
{% endwith %}
最後に
ここで紹介したのは超お手軽に利用する方法なのでテンプレートの各所でrange
関数を利用したい場合は、素直にcontext_processors
を利用するなり、カスタムテンプレートタグを作るなりしましょう。
ライブラリの導入に抵抗がなければ、
こんなのもあるので良ければどうぞ。