Django - ітераційне число для циклу шаблону


250

У моєму шаблоні джанго є дні для циклу із відображенням днів. Цікаво, чи можна повторити число (у нижньому випадку 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.
VIKAS KOHLI

2
А як щодо вкладених циклів? Як ми можемо сказати джанго, якщо ми хочемо порахувати внутрішню чи зовнішню петлю?
Тім Вукер

4
@ crey4fun, forloop.parentloopознайомтеся з документами для отримання додаткової інформації.
Рохан

91

Також можна скористатися цим:

{% if forloop.first %}

або

{% if forloop.last %}

10
Не відповідь на питання, але все-таки відповідь для багатьох людей, які шукатимуть це питання. Хороший матеріал!
kontur

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

Якщо ви використовуєте Список всередині словника, тоді не тільки перша і остання ітерація можна контролювати, але і весь індекс можна контролювати. приклад:

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

Кінець If;)

// Сподіваюсь, що вирішення було покрито рішення словником, списком, шаблоном HTML, для циклу, внутрішньої петлі, якщо іншим. Django HTML Documentaion для додаткових методів: https://docs.djangoproject.com/en/2.2/ref/templates/builtins/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.