Django - iterare il numero per il ciclo di un modello


250

Ho il ciclo seguente nel mio modello di django che visualizza i giorni. Mi chiedo se sia possibile iterare un numero (nel caso seguente i) in un ciclo. O devo memorizzarlo nel database e quindi interrogarlo in forma di days.day_number?

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

Risposte:


594

Django lo fornisce. Puoi usare:

  • {{ forloop.counter }}l'indice inizia da 1 .
  • {{ forloop.counter0 }}L'indice inizia da 0 .

Nel modello puoi fare:

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

    # do your stuff
{% endfor %}

Maggiori informazioni su: per | Tag e filtri per template integrati | Documentazione Django


1
Ma dà lunghezza-1.
VIKAS KOHLI,

2
Che dire di nidificati per loop? Come possiamo dire a django se vogliamo contare il ciclo interno o esterno?
Tim Woocker,

4
@ crey4fun, controlla i forloop.parentloopdocumenti di riferimento per ulteriori informazioni.
Rohan,

91

Inoltre si può usare questo:

{% if forloop.first %}

o

{% if forloop.last %}

10
Non la risposta alla domanda, ma comunque la risposta per molte persone che cercheranno questa domanda. Roba buona!
Kontur,

1

[Il modello HTML di Django non supporta l'indice fin d'ora], ma puoi raggiungere l'obiettivo:

Se si utilizza Dizionario nel dizionario in views.py, è possibile eseguire l'iterazione usando la chiave come indice. esempio:

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

Altrimenti, se si utilizza Elenco nel dizionario, è possibile controllare non solo la prima e l'ultima iterazione, ma anche tutti gli indici. esempio:

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

Finisci se ;)

// Hope ha coperto la soluzione con Dictionary, List, HTML template, For Loop, Inner loop, If Else. Django HTML Documentaion per altri metodi: https://docs.djangoproject.com/en/2.2/ref/templates/builtins/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.