Nhận độ dài của danh sách trong mẫu jinja2


315

Làm cách nào để có được số lượng phần tử trong danh sách trong mẫu jinja2?

Ví dụ: trong Python:

print(template.render(products=[???]))

và trong jinja2

<span>You have {{what goes here?}} products</span>

Câu trả lời:


533
<span>You have {{products|length}} products</span>

Bạn cũng có thể sử dụng cú pháp này trong các biểu thức như

{% if products|length > 1 %}

bộ lọc dựng sẵn của jinja2 được ghi lại ở đây ; và cụ thể, như bạn đã tìm thấy, length(và từ đồng nghĩa của nó count) được ghi lại thành:

Trả về số lượng các mục của một chuỗi hoặc ánh xạ.

Vì vậy, một lần nữa như bạn đã tìm thấy, {{products|count}}(hoặc tương đương {{products|length}}) trong mẫu của bạn sẽ đưa ra "số lượng sản phẩm" ("độ dài của danh sách")


Chúng ta có thể kiểm tra không xác định quá không? Tôi phải sử dụng {% nếu sản phẩm không có ...%}, điều này khá mệt mỏi
Nam G VU

@wvxvw điều này không hoạt động: {% set item_count = items | length %}miễn itemslà một danh sách, chính tả, v.v.
kbolino

7

Nhận xét của Alex có vẻ tốt nhưng tôi vẫn bối rối với việc sử dụng phạm vi. Sau đây làm việc cho tôi trong khi làm việc với điều kiện sử dụng độ dài trong phạm vi.

{% for i in range(0,(nums['list_users_response']['list_users_result']['users'])| length) %}
<li>    {{ nums['list_users_response']['list_users_result']['users'][i]['user_name'] }} </li>
{% endfor %}

2

Tôi đã gặp sự cố với độ dài Không có, dẫn đến Lỗi Máy chủ Nội bộ: LoạiError: đối tượng loại 'Không Loại' không có len ()

Cách giải quyết của tôi chỉ hiển thị 0 nếu đối tượng là Không và tính chiều dài của các loại khác, như danh sách trong trường hợp của tôi:

{{'0' if linked_contacts == None else linked_contacts|length}}

Bạn có thể sử dụng không có chức năng tích hợp nào để kiểm tra Không có . Kiểm tra thêm tại đây: https://jinja.palletsprojects.com/en/2.10.x/temsheet/#none . Ví dụ là về chủ đề này: /programming/19614027/jinja2-template-variable-if-none-object-set-a-default-value
Wojciech Jakubas
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.