Advertisement



< Prev
Next >



Django Template - for tag



In this tutorial, we are going to discuss the for built-in tag in Django Template System. The for tag corresponds to the for looping construct statement, which is to execute statements in a loop(again and again) while iterating over a sequence of values.




Working of for tag


The for tag allows us to loop over a collection of items in a sequence, starting from the first item in a sequence to the last item in a sequence.

The for tag starts with the {% for %} tag and ends with a {% endfor %} tag. All the texts between the start and end tag is known as a block. Let us see a sample code with for tag to display a list of fruits provided in fruits:

{% for x in fruits %}
	<p>{{ x }}</p>
{% endfor % }


Note: In the sample code above, <p> correspond to the paragraph HTML tag.



Variables of for tag


The for tag gives some variables, each for a different purpose. Let us discuss these variables.

Variables Description
forloop.counter
The forloop.counter variable gives us the total number of items we have already iterated over using the for tag.

It is one-indexed.

forloop.counter0
The forloop.counter0 variable gives us the total number of items we have already iterated over using the for tag.

It is zero-indexed.

forloop.first
The forloop.first variable gives us a boolean value True, if we are iterating over a collection of items for the first time using the for tag.

forloop.last
The forloop.last variable gives us a boolean value True, if we are iterating over a collection of items for the last time using the for tag.

forloop.revcounter

The forloop.revcounter variable gives a total number of leftover items to be iterated over using the for tag.

It is one-indexed.

forloop.revcounter0
The forloop.revcounter variable gives a total number of leftover items to be iterated over using the for tag.

It is zero-indexed.





Add reversed to for tag


We could add reversed keyword with the for tag to reverse the iteration over a sequence of items.




Django project with for tag


Up next, we are going to explain a situation is which the Django Template System encounters the for tag in an executing HTML template file. For those who don't know how to create a Django Project from a scratch and have not read our previous tutorials, here is a recap.







Creating a view function for the app


Once we have created the HTML template file in the application, we will also need to create a view function associated with it. A view function is simply a Python function which takes an HttpRequest from the HTML template file and returns an HttpResponse with the values of the variables specified and requested by the HTML template file.

Note: This view function is defined in the file view.py, which is already created and stored in our application directory, compare. Let us just copy and paste the following code in view.py.

We have named this view function - tag_lookup().

view.py
from django.shortcuts import render
import datetime

def tag_lookup(request):
    #Creating a dictionary of key-value pairs
    dic = { 'list2': [1, datetime.date(2019,7,16), 'Do not give up!'] }
	
	
    #Calling the render() method to render the request from template_ex.htm page by using the dictionary, dic
    return render(request, "template_ex.htm", dic)


Understanding the code in view.py :



Mapping URL to view


After creating the view function of an application, we need to specify the mapping between a URL and this view function in a file named - urls.py. The file urls.py is simply coded in Python and we will have to create the urls.py file in the folder of our application, compare.

The use of mapping a URL to the view function is, when this URL is requested by the user, its mapped view function is executed and a response is returned.

urls.py
from django.urls import path
from . import views

urlpatterns = [
        path('', views.tag_lookup),
]

As you can see in the file urls.py, we have imported the path() function from the module django.urls. The path() function has been passed the two must arguments -



Pointing the project url to application url


Next, we are going to point the project url(urls.py) to the application url(urls.py) by using the include() function. For this, we will open the file urls.py in the root - project directory, django_proj1, and copy-paste the following code.

urls.py
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('tags', include('compare.urls')),
]

As you can see in the file urls.py, we have imported the path() and include() function from the module django.urls.
The path() function has been passed the two must arguments -



How to load the HTML template file.


Before we finally execute the project, we must load the above created HTML template template.htm, which is stored within our application folder compare.

To load the HTML template file, we need to specify its full path in the configuration file - settings.py, which is stored in the project folder. For our example, you can find this file in the sub-directory django_proj1 within our project django_proj1 i.e. - django_proj1/django_proj1/settings.py.


Within the settings.py file, you need to locate the property DIRS and copy-paste the full-path to the HTML template file against it, as shown below and save the file.
'DIRS': ['E:/django_proj1/compare/'],





Executing the application of our project


To execute the compare application of our project django_proj1, we just have to enter the address - http://127.0.0.1:8000/tags/.


As you can see in the picture, the string tags/ in the URL is the URL-pattern which gets matched to the URL pattern specified in the project urls.py file, which calls the application's urls.py and its associated view function - tag_lookup(in the application) is executed and its response is displayed.

The response displays the result of using the for template tag in HTML Template file to iterate over a list defined in the view function. In this HTML template file, besides using for tag, we have also used its variables - forloop.counter, forloop.counter0, forloop.first, forloop.last. forloop.revcounter and forloop.revcounter0.




Please share this article -




< Prev
Next >
< Template with if-else tag
Template with ifequal tag >



Advertisement

Please Subscribe

Please subscribe to our social media channels for daily updates.


Decodejava Facebook Page  DecodeJava Twitter Page Decodejava Google+ Page




Advertisement

Notifications



Please check our latest addition

PYTHON and DJANGO


Advertisement