รับความยาวของรายการในเทมเพลต jinja2


315

ฉันจะรับจำนวนองค์ประกอบในรายการในเทมเพลต jinja2 ได้อย่างไร

ตัวอย่างเช่นใน Python:

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

และใน jinja2

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

คำตอบ:


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

คุณยังสามารถใช้ไวยากรณ์นี้ในการแสดงออกเช่น

{% if products|length > 1 %}

jinja2 ของฟิลเตอร์ในตัวมีเอกสารที่นี่ ; และโดยเฉพาะอย่างยิ่งที่คุณได้พบแล้วlength(และคำพ้องความหมายcount) มีการบันทึกไว้ใน:

ส่งคืนจำนวนรายการของลำดับหรือการแมป

ดังนั้นอีกครั้งที่คุณพบ{{products|count}}(หรือเทียบเท่า{{products|length}}) ในเทมเพลตของคุณจะให้ "จำนวนผลิตภัณฑ์" ("ความยาวของรายการ")


เราสามารถตรวจสอบสิ่งที่ไม่ได้กำหนดเช่นกันได้หรือไม่? ฉันต้องใช้ {% หากผลิตภัณฑ์ไม่มี ... %} ซึ่งค่อนข้างน่าเบื่อหน่าย
Nam G VU

@wvxvw สิ่งนี้ใช้งานได้: {% set item_count = items | length %}ตราบใดที่itemsเป็นรายการ, Dict, ฯลฯ
4322

7

ความคิดเห็นของอเล็กซ์ดูดี แต่ฉันก็ยังสับสนกับการใช้ช่วง ต่อไปนี้ใช้ได้กับฉันในขณะที่ทำงานโดยมีเงื่อนไขโดยใช้ความยาวภายในช่วง

{% 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

ฉันประสบปัญหากับความยาวของ None ซึ่งนำไปสู่ข้อผิดพลาดเซิร์ฟเวอร์ภายใน: TypeError: วัตถุประเภท 'NoneType' ไม่มี len ()

วิธีแก้ปัญหาของฉันเพิ่งแสดง 0 ถ้าวัตถุไม่มีและคำนวณความยาวของประเภทอื่น ๆ เช่นรายการในกรณีของฉัน:

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

คุณสามารถใช้ไม่มีสร้างในฟังก์ชั่นสำหรับการทดสอบไม่มี ตรวจสอบเพิ่มเติมได้ที่นี่: https://jinja.palletsprojects.com/en/2.10.x/templates/#none ตัวอย่างอยู่ในหัวข้อนี้: /programming/19614027/jinja2-template-variable-if-none-object-set-a-default-value
Wojciech Jakubas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.