リストに詰めたデータを、Jinja2 を使って 5列×n行*1 のテーブルで出力しなければいけなくなりました。
インデックス付きループを使って「横に5個出力したら次の行へ」という処理を書けばいいんですが、インデックス付きループに必要な enumerate が Jinja2 では使えません。なんてこったい/(^o^)\
代わりと言ってはなんですが、Jinja2 では loop っていう特殊なオブジェクトが提供されていました。
loop.index0 または loop.index で、インデックスを取得できます。ちなみに、index0 は0から開始、index は1から開始したときのインデックスです。
loop.index0 を使って 5列×n行のテーブルを出力するサンプルがこちら。
<table> <tbody> <tr> {% for item in item_list %} <td> {{ item.name }} </td> <!--5列出力したら次の行へ--> <!--インデックスは loop オブジェクトから取得--> {% if loop.index0 % 5 == 4 %} </tr> <tr> {% endif %} {% endfor %} </tr> </tbody> </table>
上記の場合、5列ぴったりで終わるとき、余計な tr タグが出力されてしまいます。でも今回はコードの読みやすさを重視し、あえて無視。
*1:行数はリストの長さで変わる