Djangoのテンプレート上で1,2,3,…とクエリの順番に番号を振る方法
やりたいこと
Djnagoでクエリをつくったあとに新しい順に並べるには、
query_set = Hoge.object.all().order_by('-id')
とか、 オブジェクト作成日時をpudateというフィールドに記入している場合は、
query_set = Hoge.object.all().order_by('-pubdate')
とかやって、テンプレートでは、
{% for obj in query_set %} {{ obj.id }}{{ obj.field1 }} {% endfor%}
などとかけばいいのですが、例えばランキングのように最新1番目、2番目・・・と表示したいときにidや発行日時をインデックスにすると、ID501、ID500、ID499・・・ のように大きい数にならんでしまうし、発行日時では時間帯になって都合が悪い・・・
どうすれば for i in range(10) のような感じで順に番号を振れるのか・・・
解決策==>{{ forloop.counter }}
はい、Djangoはその機能あります。こういうふうに書くとできます。forが回っている間カウント数を順に振ってくれるのです。
例
{% for obj in query_set %} {{ forloop.counter }} {{ obj.id }}{{ obj.field1 }} #{{ forloop.counter }} をfor構文の中に突っ込むだけ「1,2,3....」と振ってくれます。 {% endfor%} {% for obj in query_set %} {{ forloop.counter0 }} {{ obj.id }}{{ obj.field1 }} #{{ forloop.counter }} とすると「0,1,2,....」と0から振ってくれます。 {% endfor%}
かゆいところに手が届きますね^^v