DEV Community

AJAY SHRESTHA
AJAY SHRESTHA

Posted on

Extend Django Templates with Custom Tags and Filters

Django's templating system is a powerful tool for rendering HTML with dynamic data. While Django comes with a wide array of built-in template tags and filters, sometimes you need custom functionality to fit your specific needs. This guide covers how to create and use custom template tags and filters to enhance the template rendering process in Django.
Below is a detailed explanation of the different types of template tags in Django:

1. Simple Tags
Simple tags are used to generate content dynamically within a template. They can perform basic operations and return a string that can be included directly in the template output.

# app/templatetags/custom_tags.py
from django import template

register = template.Library()

@register.simple_tag
def add(x, y):
    return x + y
Enter fullscreen mode Exit fullscreen mode
<!-- template.html -->
{% load custom_tags %}

<p>{% add 3 4 %}</p> 
<!-- Output: 7 -->

Enter fullscreen mode Exit fullscreen mode

2. Inclusion Tags
Inclusion tags render a specified template fragment with a given context. This is useful for including reusable pieces of templates that need their own context, such as menus or lists.

# app/templatetags/custom_tags.py
from django import template

register = template.Library()

@register.inclusion_tag('tag/item_list.html')
def show_items(items):
    return {'items': items}

Enter fullscreen mode Exit fullscreen mode
<!-- app/templates/tag/item_list.html -->
<ul>
    {% for item in items %}
        <li>{{ item }}</li>
    {% endfor %}
</ul>
Enter fullscreen mode Exit fullscreen mode
<!-- template.html -->
{% load custom_tags %}

{% show_items items %}
Enter fullscreen mode Exit fullscreen mode

3. Assignment Tags
Assignment tags are used to set a variable in the context. This is useful for performing calculations or fetching data and then using the result in the template.

# app/templatetags/custom_tags.py
from django import template

register = template.Library()

@register.simple_tag(takes_context=True)
def get_user_full_name(context):
    user = context['user']
    return user.get_full_name()

Enter fullscreen mode Exit fullscreen mode
<!-- template.html -->
{% load custom_tags %}

{% get_user_full_name as full_name %}
<p>{{ full_name }}</p>
Enter fullscreen mode Exit fullscreen mode

4. Filter Tags
Filter tags (or custom filters) are used to transform the value of a variable before it is rendered in the template. Filters can be chained together to apply multiple transformations.

# app/templatetags/custom_tags.py
from django import template

register = template.Library()

@register.filter
def replace_dash(value, arg=False):
    if not arg:
        return str(value).replace("_", " ")
    return str(value).replace(arg, " ")

Enter fullscreen mode Exit fullscreen mode
<!-- template.html -->
{% load custom_tags %}

{{ object.title|replace_dash}}
Enter fullscreen mode Exit fullscreen mode

Django's templating system provides a variety of template tags that can be customized to fit the specific needs of your application. Understanding the built-in tags and how to create custom ones enhances the flexibility and maintainability of your Django templates, allowing you to build more dynamic and feature-rich web applications.

Top comments (0)