2011-11-10 3 views
5

リストをビューに渡しています。配列は[football, basketball, soccer]のようになります。私の見解では、私はこのような何かを表示したいと思います:Djangoでリスト反復中にインデックスを表示するには?

1. football 
2. basketball 
3. soccer 

これは、私は、配列に渡されるリストを反復しなければならないことを意味し、要素のforループを行います。テンプレートファイルでこれをどうすればできますか?

各要素について、インデックスを取得して1を追加する必要があります。さて、私はどのようにビューでこれを行うには分かりません。私がこれを行うことについて考えていた方法の1つは、辞書を作成することです({'1', 'football': '2', 'basketball': '3', 'soccer'})が、すでにデータをリスト形式にしているので、変換しないでください。

答えて

21

forloop.counterテンプレート変数が必要です。ループの

forloop.counter現在の反復(1-インデックス付き)

だからあなたのコードでは、なります。ループは、ループ内で使用可能な変数の数を設定しますため

ザ・like:

{% for sport in sports %} 
    <p>{{forloop.counter}}. {{ sport }}</p> 
{% endfor %} 

もちろん、あなたの質問にあるようにデータを表示するだけで簡単に方法は、順序付きリスト内の項目を表示するだけで、ブラウザはあなたのために番号付けを行います:テンプレートでそれを使用したい場合は@nrabinowitzから

<ol> 
{% for sport in sports %} 
    <li>{{ sport }}</li> 
{% endfor %} 
</ol> 
3

答えは良い解決策です。しかし、私はあなたがそれを一視点から行うことを求めていたと思います。

このように、enumerate機能を使用しているリストから、インデックスと値を取得するための最良の方法:

>>> for i,sport in enumerate(sports): 
...  print "%d. %s" % (i+1, sport) 
1. football 
2. basketball 
3. soccer 
:あなたは1ベースのインデックスをしたい場合は、

>>> sports = ['football', 'basketball', 'soccer'] 
>>> for i,sport in enumerate(sports): 
...  print "%d. %s" % (i, sport) 
0. football 
1. basketball 
2. soccer 

しますか、

関連する問題