Django - itera o número no loop for de um modelo

250

Eu tenho o seguinte para loop no meu modelo de django exibindo dias. Gostaria de saber se é possível iterar um número (no caso abaixo i) em um loop. Ou preciso armazená-lo no banco de dados e consultá-lo no formato days.day_number?

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

Respostas:

594

O Django fornece. Você pode usar:

  • {{ forloop.counter }}o índice começa em 1 .
  • {{ forloop.counter0 }}índice começa em 0 .

No modelo, você pode fazer:

{% for item in item_list %}
    {{ forloop.counter }} # starting index 1
    {{ forloop.counter0 }} # starting index 0

    # do your stuff
{% endfor %}

Mais informações em: para | Tags e filtros de modelo integrados | Documentação do Django

Rohan
fonte
1
Mas dá comprimento 1.
VIKAS KOHLI
2
E quanto aninhado para loops? Como podemos dizer ao django se queremos contar o loop interno ou o externo?
Tim Woocker #
4
@ crey4fun, verifique forloop.parentloopconsulte os documentos para obter mais informações.
Rohan
91

Também pode-se usar isso:

{% if forloop.first %}

ou

{% if forloop.last %}
JMJ
fonte
10
Não é a resposta para a pergunta, mas ainda é a resposta para muitas pessoas que procurarão por essa pergunta. Coisa boa!
kontur
1

[O modelo HTML do Django não suporta índice a partir de agora], mas você pode alcançar o objetivo:

Se você usar o Dictionary dentro do Dictionary em views.py, a iteração será possível usando key como índice. exemplo:

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

Caso contrário, você use List dentro do dicionário, não somente a primeira e a última iteração poderão ser controladas, mas todo o índice poderá ser controlado. exemplo:

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

Fim se ;)

// Espero ter abordado a solução com Dicionário, Lista, Modelo HTML, For Loop, Inner loop, If Else. Documentação HTML do Django para obter mais métodos: https://docs.djangoproject.com/en/2.2/ref/templates/builtins/

Mayur Raj
fonte