2011-11-10 12 views
5

Bir listeyi bir görünüme iletiyorum. Dizim şunun gibi görünüyor: [football, basketball, soccer]. Bana göre, böyle bir şey göstermek istiyorum:Django ile liste yineleme sırasında indeks nasıl görüntülenir?

1. football 
2. basketball 
3. soccer 

Bu benim diziye geçirilir listesi üzerinden yineleme gerekir anlamına gelir unsurları döngü için yapmak. Bunu şablon dosyasında nasıl yaparım?

Her öğe için dizinini almalı ve ona 1 eklemeliydim. Şimdi, bu görüşlerde nasıl yapılacağı hakkında hiçbir fikrim yok. Bunu yapmayı düşündüğüm bir yöntem, {'1', 'football': '2', 'basketball': '3', 'soccer'} gibi bir sözlük yapmak olacaktır, ancak verileri zaten bir liste biçiminde oluşturduğumdan, onu dönüştürmemeyi tercih ediyorum.

cevap

21

forloop.counter şablon değişkenini istiyorsunuz. döngü

döngü içinde mevcut değişkenlerin bir dizi ayarlar: forloop.counter (1-endeksli) döngü geçerli yineleme

Yani kod görünecektir benzeri:

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

Elbette, yalnızca sorunuzda olduğu gibi verileri görüntülemek için, daha kolay yolu sıralı bir listede öğeleri göstermek için sadece olduğunu ve tarayıcı sizin için numaralandırmaya yapar: Eğer bir şablonda kullanmak istiyorsanız @nrabinowitz gelen

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

cevabı iyi bir çözümdür. Ama bence bunu bir görüşten yapmak istiyordun.

böyle, enumerate işlevini kullanarak bir listeden indeksi ve değer almanın en iyi yolu:

>>> for i,sport in enumerate(sports): 
...  print "%d. %s" % (i+1, sport) 
1. football 
2. basketball 
3. soccer 
: Bir 1 tabanlı dizini istiyorsanız,

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

Ya

İlgili konular