Adventures in Machine Learning

Mastering Django’s Template System: Inheritance and Inclusion

Django Templates: A Comprehensive Guide

Controlling What Gets Rendered

Django, the renowned Python web framework, offers a robust template language for crafting dynamic web pages. At the heart of this system lies the ability to control what appears on a web page, facilitated by three key components: values, tags, and filters.

Values represent the variables accessible within a template, encompassing simple strings to complex Python objects. These values are accessed using Django’s template syntax, which involves combining variable names with special characters to create expressions.

Tags provide mechanisms for controlling the rendering process. They empower actions like iterating over lists, incorporating other templates, and conditionally rendering content.

Filters, on the other hand, are employed to manipulate rendered data. They allow transforming values into different formats (dates, URLs, etc.) or manipulating them through operations like sorting or truncating.

The Context Object

The Context object serves as the central hub for Django’s template system. It stores all variables available to the template, along with any additional data required for rendering the page.

View functions, responsible for handling specific URL patterns and returning responses, create the Context object. Within these functions, a dictionary of variables intended for the template is constructed and passed to the Context object.

After creation, the Context object is used to render the template. Django automatically searches for a file with the same name as the view function and utilizes the values in the Context object to populate the template with the appropriate data.

Django Template Tags

Django offers a comprehensive set of built-in tags for regulating the rendering process. One of their prominent uses is for control flow.

For instance, the if tag enables conditional rendering based on variable values, while the for tag facilitates iteration over lists and rendering content for each item.

Django also provides tags for inheritance, allowing the definition of a base template shared by multiple pages, and tags for comments, enabling the inclusion of comments in the template that are ignored during the rendering process.

Django Template Filters

In addition to tags, Django provides a rich set of built-in filters for data manipulation during rendering. The date filter is a common example, enabling the formatting of dates in various styles.

For example, you might use the date filter to display a date as “January 1, 2022” or “01/01/2022”. Other filters include the length filter, which returns the length of a list or string, and the truncatechars filter, which truncates a string to a specified number of characters.


This article has explored the fundamental concepts of Django templates, tags, and filters. We’ve covered how to control rendering, the significance of the Context object, control flow tags, built-in tags and filters, and an example of the date filter.

Understanding these concepts equips you to utilize Django’s template system for building robust and dynamic web applications. Whether you’re crafting a simple blog or a complex e-commerce site, the power and flexibility of Django’s template system make it an invaluable tool in your web development toolkit.

Template Inheritance and Inclusion in Django

When crafting web pages, there’s often a significant amount of repetitive code, encompassing elements like HTML document structure, header tags, and footer tags. This boilerplate code can add unnecessary complexity and make modifications cumbersome.

To address this, Django provides two powerful tools for template management: template inheritance and template inclusion.

Template Inheritance

Template inheritance allows you to define a base template containing the repetitive code and have other templates inherit from it. This base template is also known as the parent template.

Templates inheriting from the parent template are called child templates. Inheritance works by having the child template extend the parent template. This means the child template includes all the code from the parent template and can define additional code specific to itself. The parent template remains unchanged and can be used by multiple child templates.

For instance, an e-commerce website’s pages might require the same HTML document structure, header tags, and footer tags. Using template inheritance, you can create a parent template containing this repetitive code and define content blocks that child templates can override.

    {% block title %}{% endblock %}

{% block site_title %}{% endblock %}

{% block content %}{% endblock %}
{% block footer %}{% endblock %}

In the above code, the {% block %} tags act as placeholders in the parent template, defining where child templates’ content should be inserted.

{% extends 'parent_template.html' %}
{% block title %}Blog{% endblock %}
{% block site_title %}My Blog{% endblock %}
{% block content %}

Latest Posts

{% for post in posts %}

{{ post.title }}

{{ post.body }}
{% endfor %} {% endblock %} {% block footer %} Copyright © 2022 My Blog.

All rights reserved

{% endblock %}

The {% extend %} tag in the child template inherits from the parent template. The {% block %} tags in the child template define the specific content that will replace those in the parent template.

Template Inclusion

Template inclusion allows reusing HTML snippets across multiple templates without copying code. You can define common code in a separate template and include it in other templates as needed.

Inclusion promotes separation of concerns and easier code maintenance. It simplifies switching or updating HTML snippets without modifying numerous individual templates.

For example, if an e-commerce website has many pages containing a product catalog, you can define a product listing template and include it in all pages displaying the catalog.

{% endfor %} ” aria-label=”Copy” data-copied-text=”Copied!” data-has-text-button=”textSimple” data-inside-header-type=”none” aria-live=”polite”>Copy

{% for product in products %}

{{ }}

{{ product.description }}

Price: {{ product.price }}

{% endfor %}

{% extends 'base.html' %}
{% block content %}
  {% include 'product_listing.html' with products=products %}
{% endblock %}

The {% include %} tag is used to include the product_listing.html template in page.html. The with keyword specifies the products variable that should be passed to the included template.


In conclusion, Django’s template inheritance and inclusion are powerful tools for writing reusable and maintainable code. Inheritance allows defining a base template containing repetitive code, which is then inherited by child templates. Inclusion enables reusing HTML snippets, simplifying code and improving maintenance.

By leveraging these tools, you can create robust and dynamic web applications that are easier to manage and scale. The key takeaways are that template inheritance and inclusion are crucial for maintainable code, saving time, reducing duplication, and enhancing maintainability.

Popular Posts