Django follows the MVC (Model = database-logic,  View=business-logic  Controller=presentation logic ). We can write the required logics based on programming[python] syntax in models and views but, when we want to write simple logics we should follow the django's template syntax, because programming[python]  syntax is not allowed.

We have the Template syntax as follows:

 

 
Syntax Explanation Example
{{  variable name   }} To display the variable value. Just like  " print " as in python input:
Welcome  "{{ request.user.username }}"
output:
Welcome  "Abhi Ram"
 
{% if  condition %}
     --- logic ----
{% endif  %}

It is a conditional expression same as " if " condition in python 

input:
{% if request.user.can_edit %}
    <button> Edit </button>
{% endif %}
output: 
if user has attribute "can_edit"  as True then it will give result 
 " <button> Edit </button> "
nothing otherwise.

 
{% if  condition1 %}
    --logic--
{% elif  condition2 %}
    -- logic--
{% else %}
   -- logic --
{% endif %}

 
same as python's   " if...elif....else "  just like above 
{% for  iterable object %}
   --logic--
{% endfor %}
takes an iterable object  returns an iterator object in every iteration.
To get reverse indexes use " forloop.revcounter "
input:  users = ["Naveen", "Ramu", "Danny", "Shera"]
{% for user in users %}
    {% if forloop.first %} First iter {% endif%} 
    {{ forloop.counter }} . {{ user }}
     {% if forloop.last %} Last iter {% endif%} 
{% endfor %}
output:
    
First iter
    1. Naveen
    2. Ramu
    3. Danny
    4. Shera
    Last iter
{% with  author_books = request.user|getbooks %}
      -- logic --
{% endwith %}
access the variable within the block. it's used when we require the same varialbe multiple times -
{% include 'sub_template.html'  with context=context  %}
                     or
{% include 'menu.html'  %}
This will include the partial tempate data by rendering it with the context -
{% load library %} This will load the given library and made its functionality(tags) available in the template -
{% load tag from library %} This will load a specific tag from the given library -
{% url "namespace:name" var1=1 va2=2 %} This will generate the url by taking  app namespace , view name and required data -
{% autoescape on|off %}
  {{ data }}
{% endautoescape %}

It will stop the XSS vulnerabilities  from the script.

-
{% now %} This gives current datetime and timezone Todays date: {% now "f" %}
{{ "Hello world"|lower  }} To convert the text to lowercase 

{{ "Hello world"|lower  }}  gives  "hello world"

{{ "Hello world"|upper  }} To convert the text to uppercase {{ "Hello world"|upper  }}  gives  "HELLO WORLD"
{{ "hyderabad"|capfirst  }} To convert the first letter to uppercase {{ "hyderabad"|capfirst  }} gives  "Hyderabad"
{{ "hellow world"|title }} converts the text to title case {{ "hellow world"|title }}  gives "Hello World"
{{ "hello    world "|slugify }} converts given text to slug form {{ "hello    world "|slugify }}  gives "hello-world"
{{ "this is micropyramid world"|wordcount }} counts the number of words in the text 
{{ "this is micropyramid world"|wordcount }}  gives "4"
{{  "this is micropyramid world"|truncatechars: n}} show's characters up to number "n" {{  "this is micropyramid"|truncatechars: 7}}  gives "this is ..."
{{  "this is micropyramid world"|truncatewords: n}} show's words up to number "n" {{  "this is micropyramid"|truncatechars: 2}}  gives "this is ..."
{{  query_set|length }} returns the no of objects in quesry set -
{{ query_set|slice:"start:end"  }} returns the sliced query set
{{ query_set|slice:"3:5"  }} same as  "query_set[3:5]"
{{ query_set||dictsort:"key"}} sort's the query_set based on the given key  -
{{ query_set|dictsortreversed:"key"}} sort's the query_set based on the given key  in reversed order -
{{ var_name|default:"Not assigned"}} if variable is not provided then default value is replaced -
{{ datetime_object|date:"d-m-yy"}} return the date in a given format -

Same usages as in views:     
     Operators:
   == ,  = ,  > , >= ,  < , <=,
    
Keywords:   and , or ,  not

Subscribe To our news letter

Subscribe to our news letter to receive latest blog posts into your inbox. Please fill your email address in the below form.
*We don't provide your email contact details to any third parties
Latest Comments
Related Articles
Django Raw Sql Queries Vamsi Popuri

When your model query API don't go well or you want more performance, you can use raw sql queries in django. The Django Object Relational ...

Continue Reading...
Implement search with Django-haystack and Elasticsearch Part-I Ravi Kumar Kumar

Haystack works as search plugin for django. You can use different back ends Elastic-search, Whose, Sorl, Xapian to search objects. All backends work with same ...

Continue Reading...
Basics of Django templates Siva Chittamuru

Django template engine comes as part of django framework and its very easy, extensible and handy to develop complex web applications with simplest efforts. Lets ...

Continue Reading...