MawaLog

一日一日、楽しく生きる。技術と音楽が好き。

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

参考にした記事

stackoverflow.com