2009-04-24 42 views
9

Về mặt kỹ thuật, nó sẽ lặp lại từ 0 đến rangeLength xuất ra tên người dùng của c [i] [0] .from_user ... nhưng nhìn vào ví dụ trực tuyến, chúng dường như thay thế các dấu ngoặc ký hiệu chấm. Tôi có đoạn mã sau:Mẫu Django Python: Lặp qua Danh sách

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

này hiện kết quả đầu ra không có gì :(Nếu tôi thay thế "i" với 0 ... {{c.0.0.from_user}} ... nó sẽ ra một cái gì đó .. (người đầu tiên sử dụng 10 lần)

+1

Vui lòng cung cấp cấu trúc 'c'. Nếu không, điều này khó giải thích. –

Trả lời

16

bạn có cần i là một chỉ số Nếu không, xem đoạn mã sau làm những gì bạn đang sau:

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

Lý tưởng nhất tôi cần tôi là một chỉ mục để tôi có thể giới hạn số lượng người dùng lặp lại. Tôi có nên làm điều này trong Bộ điều khiển trước khi chuyển c tới mẫu không? – TimLeung

+1

Có, bạn nên. –

+1

+1 để thực hiện điều này trong lớp điều khiển; khung nhìn không nên chứa logic nghiệp vụ như thế. –

8

bạn nên sử dụng các mẫu lát lọc để đạt được những gì bạn muốn:

lặp qua các đối tượng (c trong trường hợp này) như sau:

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

Điều này sẽ đảm bảo rằng bạn chỉ lặp trong 30 đối tượng đầu tiên.

Ngoài ra, bạn có thể sử dụng đối tượng forloop.counter để theo dõi bạn đang lặp lại vòng lặp nào.

13

Vui lòng đọc toàn bộ documentation on the template language's for loops. Trước hết, sự lặp lại đó (như trong Python) là trên các đối tượng, không phải là các chỉ mục. Thứ hai, trong vòng lặp bất kỳ có biến forloop với hai trường bạn sẽ quan tâm:

Variable   Description 
forloop.counter  The current iteration of the loop (1-indexed) 
forloop.counter0 The current iteration of the loop (0-indexed) 
Các vấn đề liên quan