Làm thế nào để truy cập các phần tử mảng trong mẫu Django?


166

Tôi nhận được một mảng arrđược chuyển đến mẫu Django của tôi. Tôi muốn truy cập các phần tử riêng lẻ của mảng trong mảng (ví dụ :) arr[0], arr[1]v.v. thay vì lặp qua toàn bộ mảng.

Có cách nào để làm điều đó trong một mẫu Django không?


3
Bạn có thể truy cập mục như thế này arr.0, arr.1... Một giải pháp khác: viết thẻ mẫu của riêng bạn arr|array_item: "0" hoặc đại loại như thế này.
rphonika

1
@rphonika Có, ví dụ ở đây: stackoverflow.com/a/29664945/2714931
WeizhongTu

Câu trả lời:


303

Hãy nhớ rằng ký hiệu dấu chấm trong mẫu Django được sử dụng cho bốn ký hiệu khác nhau trong Python. Trong một mẫu, foo.barcó thể có nghĩa là bất kỳ:

foo[bar]       # dictionary lookup
foo.bar        # attribute lookup
foo.bar()      # method call
foo[bar]       # list-index lookup

Nó thử chúng theo thứ tự này cho đến khi tìm thấy một trận đấu. Vì vậy, foo.3sẽ giúp bạn có được chỉ mục danh sách của mình vì đối tượng của bạn không phải là một dict với 3 là khóa, không có thuộc tính có tên 3 và không có phương thức có tên 3.


3
Không phải là người đầu tiên và cuối cùng giống như foo['bar']?
Bob Stein

2
Dường như không có cách nào để truy cập vào một mục danh sách bằng cách sử dụng một chỉ số biến :(
Vicky Chijwani

Đồng ý với @VickyChijwani: tùy chọn thứ tư ở trên không hợp lệ. Các mẫu Django dường như không thực hiện tra cứu chỉ mục danh sách với các biến
ehacinom

@hiyume Làm thế nào để khắc phục điều đó?
Csaba Toth

Tôi không hiểu rằng tôi không thể tìm thấy điều đó trong tài liệu chính thức. Bạn có thể cung cấp một nguồn cho bài viết đó? Tôi cũng ngạc nhiên khi hiện tại câu trả lời này không được chấp nhận.
Kaszanas

148
arr.0
arr.1

Vân vân.


10
cách in động như ex: Array.variablename
Nandha Kumar

Có cách nào để làm điều này mà không có số ma thuật? Nói cách khác để "đặt tên" cho .0 .1 .2 vv ...? Chẳng hạn như mảng ["tên"], mảng ["họ"] vv ..
cyberjoac 19/12/14

@cyberjoac trong trường hợp đó sử dụng một lệnh. Trong chế độ xem: d = {'first_name': 'foo', 'last_name': 'bar'}. Trong mẫu {{d.first_name}} sẽ hoạt động tốt.
Ofri Raviv


7

khi bạn renderyêu cầu coctextmột số thông tin: cho exampel:

return render(request, 'path to template',{'username' :username , 'email'.email})

bạn có thể truy cập nó trên mẫu như thế này: for variabels :

{% if username %}{{ username }}{% endif %}

for array :

{% if username %}{{ username.1 }}{% endif %}
{% if username %}{{ username.2 }}{% endif %}

bạn cũng có thể đặt tên cho các đối tượng mảng views.pyvà mười sử dụng nó như sau:

{% if username %}{{ username.first }}{% endif %}

nếu có vấn đề khác tôi muốn giúp bạn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.