حلقه for (For Loop)
در قالب های جنگو، «حلقه for» یعنی تکرار روی مجموعه. مثل حضور و غیاب کلاس که اسم ها را یکی یکی می خوانیم. سپس برای هر مورد، بخشی از HTML ساخته می شود.
حلقه روی لیست ساده
با for روی لیست می چرخیم. سپس هر عضو را نمایش می دهیم.
{% for x in fruits %}
<h1>{{ x }}</h1>
{% endfor %}
حلقه روی لیست دیکشنری ها
هر خودرو یک دیکشنری است. سپس فیلدها را جداگانه چاپ کن.
{% for x in cars %}
<h1>{{ x.brand }}</h1>
<p>{{ x.model }}</p>
<p>{{ x.year }}</p>
{% endfor %}
داده از مدل
خروجی کوئری مدل شبیه لیست دیکشنری هاست. سپس مانند بالا حلقه بزن.
{% for x in members %}
<h1>{{ x.id }}</h1>
<p>
{{ x.firstname }}
{{ x.lastname }}
</p>
{% endfor %}
ordre معکوس با reversed
با «reversed» از آخر به اول می چرخیم. سپس همان فیلدها را می نویسیم.
{% for x in members reversed %}
<h1>{{ x.id }}</h1>
<p>
{{ x.firstname }}
{{ x.lastname }}
</p>
{% endfor %}
حالت خالی با empty
اگر لیست خالی بود، بلاک «empty» اجرا می شود. سپس پیام بده.
<ul>
{% for x in emptytestobject %}
<li>{{ x.firstname }}</li>
{% empty %}
<li>No members</li>
{% endfor %}
</ul>
نکته: اگر شیء وجود نداشت هم «empty» کار می کند.
<ul>
{% for x in myobject %}
<li>{{ x.firstname }}</li>
{% empty %}
<li>No members</li>
{% endfor %}
</ul>
متغیرهای کمکی حلقه
جنگو درون حلقه، متغیرهای مفیدی می دهد. مانند شمارنده و اولین/آخرین.
forloop.counter
شماره تکرار از 1. سپس می توانی شماره ردیف بگذاری.
<ul>
{% for x in fruits %}
<li>{{ forloop.counter }}</li>
{% endfor %}
</ul>
forloop.counter0
شماره تکرار از 0. برای ایندکس آرایه مناسب است.
<ul>
{% for x in fruits %}
<li>{{ forloop.counter0 }}</li>
{% endfor %}
</ul>
forloop.first / forloop.last
اولین یا آخرین تکرار را تشخیص بده. سپس استایل بده.
<ul>
{% for x in fruits %}
<li
{% if forloop.first %}
style='background-color:lightblue;'
{% endif %}
>{{ x }}</li>
{% endfor %}
</ul>
<ul>
{% for x in fruits %}
<li
{% if forloop.last %}
style='background-color:lightblue;'
{% endif %}
>{{ x }}</li>
{% endfor %}
</ul>
forloop.revcounter / revcounter0
شمارنده معکوس از انتها. سپس شماره گذاری نزولی بساز.
<ul>
{% for x in fruits %}
<li>{{ forloop.revcounter }}</li>
{% endfor %}
</ul>
<ul>
{% for x in fruits %}
<li>{{ forloop.revcounter0 }}</li>
{% endfor %}
</ul>
گام های عملی
- یک لیست ساده در context بفرست.
- روی لیست حلقه بزن و آیتم ها را چاپ کن.
- empty و reversed را امتحان کن.
- از forloop.counter برای شماره گذاری استفاده کن.
جمع بندی سریع
- for روی مجموعه تکرار می کند.
- empty برای حالت خالی است.
- reversed ترتیب را برعکس می کند.
- متغیرهای forloop خیلی کاربردی اند.
برای شرط ها، صفحه حلقه for و تگ ها را کنار هم تمرین کن. همچنین بخش متغیرها با همین مثال ها هماهنگ است.