I have the following for loop in my django template displaying days. I wonder, whether it's possible to iterate a number (in the below case i) in a loop. Or do I have to store it in the database and then query it in form of days.day_number?
{% for days in days_list %} <h2># Day {{ i }} - From {{ days.from_location }} to {{ days.to_location }}</h2> {% endfor %} 7 Answers
Django provides it. You can use either:
{{ forloop.counter }}index starts at 1.{{ forloop.counter0 }}index starts at 0.
In template, you can do:
{% for item in item_list %} {{ forloop.counter }} # starting index 1 {{ forloop.counter0 }} # starting index 0 # do your stuff {% endfor %} More info at: for | Built-in template tags and filters | Django documentation
3Also one can use this:
{% if forloop.first %} or
{% if forloop.last %} 1{% for days in days_list %} <h2># Day {{ forloop.counter }} - From {{ days.from_location }} to {{ days.to_location }}</h2> {% endfor %} or if you want to start from 0
{% for days in days_list %} <h2># Day {{ forloop.counter0 }} - From {{ days.from_location }} to {{ days.to_location }}</h2> {% endfor %} 1from the docs you can found it to count items you can use a counter like this
{% for job in jobs %} <td>{{ forloop.counter }}</td> <td>{{ job.title }}</td> <td>{{ job.job_url }}</td> {% endfor %} {{ forloop.counter }}start counting from1{{ forloop.counter0 }}start counting from0
Do like this,
{% for days in days_list %} <h2># Day {{ forloop.counter }} - From {{ days.from_location }} to {{ days.to_location }}</h2> {% endfor %} [Django HTML template doesn't support index as of now], but you can achieve the goal:
If you use Dictionary inside Dictionary in views.py then iteration is possible using key as index. example:
{% 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 %} Elseif you use List inside dictionary then not only first and last iteration can be controlled, but all index can be controlled. example:
{% 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 %} End If ;)
// Hope have covered the solution with Dictionary, List, HTML template, For Loop, Inner loop, If Else. Django HTML Documentaion for more methods:
I think you could call the id, like this
{% for days in days_list %} <h2># Day {{ days.id }} - From {{ days.from_location }} to {{ days.to_location }}</h2> {% endfor %}