Template Tags
Django has this amazing feature of templating static HTML files to serve them as dynamic pages. If I want to add a title to my web page.
....
<title> Homee </title>
....
But what if I want to add different titles for different pages? Like Home for home page and cart page as Cart.
So for this we use template tags already defined in Django. I use
{% block title %}
<title>Home</title>
{% endblock %}
for replacing title blocks in each page extended from a base template with a blank title block like this
{% block title %}
{% endblock %}
using another pre-defined template tag
{% extends 'base.html %}
How to create one?
Well now sometimes these predefined template tags are not well enough to solve your problem together. Say you want one tag which can give you the modulo of the number of elements in a passed object and any integer. This can be useful if you want different column offset in bootstrap according to the number of elements.
These are the few steps you must follow:-
- Create a templatetags folder in one of the app which is in INSTALLED_APPS arrray in settings file of the project
- Create a blank init.py file inside templatetags folder o make Python treat the directories as containing packages.
- Create the custom tags file such as custom_tags.py
- Inside that, we have to write function for our custom template tag
from django import template
register = template.Library()
@register.filter
def remainder(value, arg):
return value % arg
Here we registering a custom tag with name remainder which takes value and arg from template like this
{{ value|remainder:arg }}
and returns the remainder.
How to use it?
First, we have to load the custom tag. And then we can use them as we want. I am checking the number of coins is even or not.
{% load custom_tags %}
...
...
{% if coin|remainder:2 == 0 %}
<p> You have even number of coins </p>
{% else %}
<p> You have odd number of coins </p>
{% endif %}
...
...
This is a very simple example of using custom template tags. You can read the full documentation of Django here regarding this topic to get some more advanced idea of how to use template tags.
Top comments (2)
Nice to see you here man! Good going. :)
I like the explanation, simple and direct! Thanks