Django - повторять число в цикле шаблона


250

В моем шаблоне django отображаются дни цикла. Интересно, можно ли повторить число (в приведенном ниже случае i) в цикле. Или я должен сохранить его в базе данных, а затем запросить его в виде days.day_number?

{% for days in days_list %}
    <h2># Day {{ i }} - From {{ days.from_location }} to {{ days.to_location }}</h2>
{% endfor %}

Ответы:


594

Джанго это обеспечивает. Вы можете использовать либо:

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

Больше информации на: для | Встроенные шаблоны тегов и фильтров | Джанго документация


1
Но это дает длину -1.
ВИКАС КОЛИ

2
Как насчет вложенных для циклов? Как мы можем сказать Django, если мы хотим сосчитать внутренний или внешний цикл?
Тим Вукер

4
@ crey4fun, проверьте справочные forloop.parentloopдокументы для получения дополнительной информации.
Рохан

91

Также можно использовать это:

{% if forloop.first %}

или

{% if forloop.last %}

11
Не ответ на вопрос, но все же ответ для многих людей, которые будут искать этот вопрос. Хорошая вещь!
Контур

1

[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/

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.