Django for Tag
For Loops
A for
loop is used for iterating over a sequence, like looping over items in an array, a list, or a dictionary.
Example
Loop through the items of a list:
1 2 3 |
{% for x in fruits %} <h1>{{ x }}</h1> {% endfor %} |
Example
Loop through a list of dictionaries:
1 2 3 4 5 |
{% for x in cars %} <h1>{{ x.brand }}</h1> <p>{{ x.model }}</p> <p>{{ x.year }}</p> {% endfor %} |
Data From a Model
Data in a model is like a table with rows and columns.
The Members model we created earlier has five rows, and each row has three columns:
id | firstname | lastname |
---|---|---|
1 | Emil | Refsnes |
2 | Tobias | Refsnes |
3 | Linus | Refsnes |
4 | Lene | Refsnes |
5 | Stalikken | Refsnes |
When we fetch data from the model, it comes as a QuerySet object, with a similar format as the cars example above: a list with dictionaries:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<QuerySet [ { 'id': 1, 'firstname': 'Emil', 'lastname': 'Refsnes' }, { 'id': 2, 'firstname': 'Tobias', 'lastname': 'Refsnes' }, { 'id': 3, 'firstname': 'Linus', 'lastname': 'Refsnes' }, { 'id': 4, 'firstname': 'Lene', 'lastname': 'Refsnes' }, { 'id': 5, 'firstname': 'Stalikken', 'lastname': 'Refsnes' } ]> |
Example
Loop through items fetched from a database:
1 2 3 4 5 6 7 |
{% for x in members %} <h1>{{ x.id }}</h1> <p> {{ x.firstname }} {{ x.lastname }} </p> {% endfor %} |
Reversed
The reversed
keyword is used when you want to do the loop in reversed order.
Example
1 2 3 4 5 6 7 |
{% for x in members reversed %} <h1>{{ x.id }}</h1> <p> {{ x.firstname }} {{ x.lastname }} </p> {% endfor %} |
Empty
The empty
keyword can be used if you want to do something special if the object is empty.
Example
1 2 3 4 5 6 7 |
<ul> {% for x in emptytestobject %} <li>{{ x.firstname }}</li> {% empty %} <li>No members</li> {% endfor %} </ul> |
The empty
keyword can also be used if the object does not exist:
Example
1 2 3 4 5 6 7 |
<ul> {% for x in myobject %} <li>{{ x.firstname }}</li> {% empty %} <li>No members</li> {% endfor %} </ul> |
Loop Variables
Django has some variables that are available for you inside a loop:
- forloop.counter
- forloop.counter0
- forloop.first
- forloop.last
- forloop.parentloop
- forloop.revcounter
- forloop.revcounter0
forloop.counter
The current iteration, starting at 1.
Example
1 2 3 4 5 |
<ul> {% for x in fruits %} <li>{{ forloop.counter }}</li> {% endfor %} </ul> |
forloop.counter0
The current iteration, starting at 0.
Example
1 2 3 4 5 |
<ul> {% for x in fruits %} <li>{{ forloop.counter0 }}</li> {% endfor %} </ul> |
forloop.first
Allows you to test if the loop is on its first iteration.
Example
Draw a blue background for the first iteration of the loop:
1 2 3 4 5 6 7 8 9 |
<ul> {% for x in fruits %} <li {% if forloop.first %} style='background-color:lightblue;' {% endif %} >{{ x }}</li> {% endfor %} </ul> |
forloop.last
Allows you to test if the loop is on its last iteration.
Example
Draw a blue background for the last iteration of the loop:
1 2 3 4 5 6 7 8 9 |
<ul> {% for x in fruits %} <li {% if forloop.last %} style='background-color:lightblue;' {% endif %} >{{ x }}</li> {% endfor %} </ul> |
forloop.revcounter
The current iteration if you start at the end and count backwards, ending up at 1.
Example
1 2 3 4 5 |
<ul> {% for x in fruits %} <li>{{ forloop.revcounter }}</li> {% endfor %} </ul> |
forloop.revcounter0
The current iteration if you start at the end and count backwards, ending up at 0.
Example
1 2 3 4 5 |
<ul> {% for x in fruits %} <li>{{ forloop.revcounter0 }}</li> {% endfor %} </ul> |