2009-04-24 7 views
9

Teknik olarak, 0'dan menziline kadar olan aralıktan c [i] [0] .from_user… kullanıcı adını çıktısını almalı, ancak çevrimiçi örneklere bakmadan köşeli parantezleri nokta gösterimi.Python Django Şablon: Listeden Iterate Et

<div id="right_pod"> 
{%for i in rangeLength%} 
    <div class="user_pod" > 
     {{c.i.0.from_user}} 
    </div> 
{% endfor %} 

Bu, şu anda hiçbir şey verir :(Ben "i" 0 ... {{c.0.0.from_user}} ... çıktısı verecektir şey ile değiştirin: Aşağıdaki kod var

<div id="right_pod"> 
{% for i in c %} 
    <div class="user_pod"> 
     {{ i.0.from_user }} 
    </div> 
{% endfor %} 
+1

Lütfen 'c' yapısını belirtin. Aksi halde bu yorumlamak zordur. –

cevap

16

aşağıdaki kod sonra ne konum yaparsa bakın değilse, bir indeks olmak i gerekiyor mu elde etmek için filtre Ne istediğinizi:

Bıkmadan nesnenin üzerine (bu durumda c) şöyle:

{% for c in objects|slice:":30" %} 

Bu, yalnızca ilk 30 nesneler üzerinde yineleme emin olur.

Ayrıca, hangi döngü yineleme işleminin takip edildiğini takip etmek için forloop.counter nesnesini de kullanabilirsiniz.

+0

İdeal olarak bir dizin olmak için ihtiyacım var, bu yüzden döngü için kullanıcı sayısını sınırlayabilirim. Bunu c'ye şablondan geçmeden önce kontrolörde yapmalı mıyım? – TimLeung

+1

Evet, yapmalısınız. Bunu denetleyici katmanında yapmak için –

+1

+1; Görünüm böyle bir iş mantığı içermemelidir. * Mutlaka * –

8

sen dilim şablonunu kullanmalıdır:? .. ​​(ilk kullanıcı 10 kez)

13

Lütfen documentation on the template language's for loops ürününün tamamını okuyun. Her şeyden önce, bu yineleme (Python'da olduğu gibi), dizinlerin değil, nesnelerin üzerindedir. İkinci olarak, herhangi bir for döngüsünde, ilgileneceğiniz iki alanla birlikte bir forloop değişkeni var:

Variable   Description 
forloop.counter  The current iteration of the loop (1-indexed) 
forloop.counter0 The current iteration of the loop (0-indexed)