目次

目次

Jinja2 の便利な機能 loop

アバター画像
江藤 光
アバター画像
江藤 光
最終更新日2017/10/31 投稿日2017/10/31

社内では Jinja2 というテンプレート言語を使って、HTML を生成しています。 公式を見ると、近ごろ流行りの Instagram も Jinja2 を使っているらしいです。 …の割にはネット上に情報があんまりなかったりします。

Jinja2 には色んな機能があるのですが、この記事では便利な割に影の薄い loop という変数を紹介します。


例えば、こんな要件があったとします。

users = ['パンチョ', 'ピンチョ', 'おおしおへいはちろう']

という名前の入った配列が渡されるので、

パンチョ、ピンチョ、おおしおへいはちろう

と表示する。


フロントだとありがちな要件ですが、このような時に loop が使えます。

loop は for 文の中で使うことが出来、以下の変数を使用できます。

  • loop.index : 現在、何回目のループかを返す
  • loop.first : 初回のループなら True, そうでなければ False
  • loop.last : 最後のループなら True, そうでなければ False
  • length : ループの回数を返す

この loop.last を使うと、上記のような処理は簡単に書けます。 最後のループ以外は loop.last が False なので、そこで分岐させます。

{% for user in users %}
{{ user }}{% if not loop.last %}、{% endif %}
{% endfor %}

また loop.first を使うと、同じような編集フォームを出力しながら、 1番目 のフォームは削除の x ボタンを出さない、という処理が簡単に書けます。 さらに、渡された配列が事前にソートされていれば、番号も loop.index を使って表示することが出来ます。

loop_first2.jpg

他の言語だと、このような機能はあまりないような気がします。 実際、今までは do-while 文なんかをつかって、結構無理矢理書いたりしてました。 使える便利な機能はどんどん使っていきたいですね。

アバター画像

江藤 光

まだまだ気持ちは新人です。

目次