วิธีเข้าถึง forloop.counter ด้านนอกสุดพร้อมซ้อนกันสำหรับลูปในเทมเพลต Django


118

เป็นไปได้หรือไม่ที่จะเข้าถึง forloop.counter สำหรับวงนอกสุดสำหรับการวนซ้ำในเทมเพลตต่อไปนี้ใน Django:

{% for outerItem in outerItems %}
    {% for item in items%}
        <div>{{ forloop.counter }}.&nbsp;{{ item }}</div>
    {% endfor %}
{% endfor %}

forloop.counter ส่งกลับด้านในสุดสำหรับตัวนับของลูปในตัวอย่างด้านบน

คำตอบ:


230

คุณสามารถใช้forloop.parentloopจะได้รับไปด้านนอกดังนั้นในกรณีของคุณforloop{{forloop.parentloop.counter}}


14

คุณยังสามารถใช้กับไฟล์

แคชตัวแปรที่ซับซ้อนภายใต้ชื่อที่ง่ายกว่า สิ่งนี้มีประโยชน์เมื่อเข้าถึงเมธอด "ราคาแพง" (เช่นวิธีที่กระทบฐานข้อมูล) หลาย ๆ ครั้ง

{% for outerItem in outerItems %}
  {% with forloop.counter as outer_counter %}
    {% for item in items%}
        <div>{{ outer_counter }}.&nbsp;{{ item }}</div>
    {% endfor %}
  {% endwith %}
{% endfor %}

หากใช้ Django เวอร์ชันสูงคุณสามารถใช้ได้

{% with outer_counter = forloop.counter %}

ฉันตรวจสอบแล้ว Django 1.4.x - Django 1.9.x รองรับสองวิธี

สิ่งนี้ชัดเจนยิ่งขึ้นเมื่อมีจำนวนมากสำหรับลูป


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.