Django - итерация числа для цикла шаблона
У меня есть следующий цикл for в моем шаблоне django, отображающем дни. Интересно, возможно ли итерировать число (в нижнем случае i) в цикле. Или мне нужно сохранить его в базе данных, а затем запросить его в виде days.day_number?
{% for days in days_list %}
<h2># Day {{ i }} - From {{ days.from_location }} to {{ days.to_location }}</h2>
{% endfor %}
Ответы
Ответ 1
Джанго это обеспечивает. Вы можете использовать либо:
-
{{ forloop.counter }}
начинается с 1. -
{{ forloop.counter0 }}
начинается с 0.
В шаблоне вы можете сделать:
{% for item in item_list %}
{{ forloop.counter }} # starting index 1
{{ forloop.counter0 }} # starting index 0
# do your stuff
{% endfor %}
Больше информации на: для | Встроенные шаблоны тегов и фильтров | Джанго документация
Ответ 2
Также можно использовать это:
{% if forloop.first %}
или
{% if forloop.last %}
Ответ 3
[HTML-шаблон Django на данный момент не поддерживает индекс], но вы можете достичь цели:
Если вы используете словарь внутри словаря в views.py, то итерация возможна с использованием ключа в качестве индекса. пример:
{% for key, value in DictionartResult.items %} <!-- dictionartResult is a dictionary having key value pair-->
<tr align="center">
<td bgcolor="Blue"><a href={{value.ProjectName}}><b>{{value.ProjectName}}</b></a></td>
<td> {{ value.atIndex0 }} </td> <!-- atIndex0 is a key which will have its value , you can treat this key as index to resolve-->
<td> {{ value.atIndex4 }} </td>
<td> {{ value.atIndex2 }} </td>
</tr>
{% endfor %}
В противном случае, если вы используете List внутри словаря, тогда можно контролировать не только первую и последнюю итерацию, но и весь индекс. пример:
{% for key, value in DictionaryResult.items %}
<tr align="center">
{% for project_data in value %}
{% if forloop.counter <= 13 %} <!-- Here you can control the iteration-->
{% if forloop.first %}
<td bgcolor="Blue"><a href={{project_data}}><b> {{ project_data }} </b></a></td> <!-- it will always refer to project_data[0]-->
{% else %}
<td> {{ project_data }} </td> <!-- it will refer to all items in project_data[] except at index [0]-->
{% endif %}
{% endif %}
{% endfor %}
</tr>
{% endfor %}
Конец если;)
//Надеюсь покрыли решение словарем, списком, шаблоном HTML, циклом For, внутренним циклом If Else. Документация по Django HTML для получения дополнительных методов: https://docs.djangoproject.com/en/2.2/ref/templates/builtins/