2011-11-10 43 views
5

Tôi đang chuyển danh sách sang chế độ xem. Mảng của tôi trông giống như sau: [football, basketball, soccer]. Theo quan điểm của tôi, tôi muốn hiển thị một cái gì đó như thế này:Làm cách nào để hiển thị chỉ mục trong khi lặp lại danh sách với Django?

1. football 
2. basketball 
3. soccer 

Điều này có nghĩa là tôi sẽ phải lặp qua danh sách được chuyển đến mảng, thực hiện vòng lặp for trên các phần tử. Làm thế nào tôi sẽ làm điều này trong tập tin mẫu?

Đối với mỗi phần tử, tôi sẽ phải lấy chỉ mục của nó và thêm 1 vào đó. Bây giờ, tôi không có ý tưởng làm thế nào để làm điều này trong quan điểm. Một cách tôi nghĩ về việc này là tạo một từ điển, như vậy, {'1', 'football': '2', 'basketball': '3', 'soccer'}, nhưng vì tôi đã có dữ liệu trong một định dạng danh sách, tôi không muốn chuyển đổi nó.

Trả lời

21

Bạn muốn biến mẫu forloop.counter.

Vòng lặp for đặt ra một số biến có sẵn trong vòng lặp:

forloop.counter Các lặp hiện tại của vòng lặp (1-lập chỉ mục)

Vì vậy, mã của bạn sẽ trông như:

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

Tất nhiên, để chỉ hiển thị dữ liệu như bạn đã làm trong câu hỏi, dễ dàng hơn cách chỉ là để hiển thị các mục trong một danh sách đặt hàng, và trình duyệt sẽ thực hiện đánh số cho bạn:

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

Câu trả lời từ @nrabinowitz là một giải pháp tốt nếu bạn muốn sử dụng nó trong một mẫu. Nhưng tôi nghĩ rằng bạn đã yêu cầu làm điều đó từ một cái nhìn.

Cách tốt nhất để có được những chỉ số và giá trị từ một danh sách đang sử dụng enumerate chức năng, như thế này:

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

Hoặc, nếu bạn muốn có một chỉ số 1 dựa trên:

>>> for i,sport in enumerate(sports): 
...  print "%d. %s" % (i+1, sport) 
1. football 
2. basketball 
3. soccer 
Các vấn đề liên quan