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