Back to C++
2026-03-255 min read

Templates (Web Development)

Learn Templates (Web Development) step by step with clear examples and exercises.

Title: Django Templates in Web Development - A full guide

Why This Matters

Django templates are a powerful tool for web developers, allowing for dynamic and reusable HTML code. They help streamline the process of creating complex websites by separating the presentation layer from the application logic, making it easier to manage content and layout. Understanding Django templates is crucial for modern web development, as they are used extensively in Django projects and can be a significant advantage when preparing for interviews or real-world programming challenges.

Prerequisites

To follow this guide, you should have a basic understanding of:

  1. HTML and CSS - to understand the structure and styling of web pages.
  2. Python - as Django is built using Python, familiarity with the language will make it easier to grasp Django templates.
  3. Familiarity with web development concepts such as HTTP requests, URL routing, and views.
  4. Basic understanding of Django - knowledge of how to set up a Django project and create basic views is helpful but not required, as we'll cover the essentials in this guide.

Core Concept

Django templates are based on the template engine called Template Language (TL) which allows for dynamic content insertion and looping constructs. Django templates use a syntax that combines HTML with Python-like expressions, filters, and tags.

Template Files

In a Django project, template files are typically stored in the templates directory within an application or the root project directory. Each template file has a .html extension.

Basic Structure of a Django Template

A basic Django template consists of HTML markup with embedded Python expressions enclosed between {% %} braces. Here's an example:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}My Django Template{% endblock %}</title>
</head>
<body>
{% block content %}
<h1>Welcome to my Django template!</h1>
{% endblock %}
</body>
</html>

In this example, we have defined two blocks: title and content. These blocks can be overridden in a child template or in the view's context.

Variables and Expressions

Django templates support variables, which are assigned values through the view's context. To access a variable, simply use its name within the curly braces:

<h1>Hello, {{ name }}!</h1>

Loops and Conditional Statements

Django templates provide loops and conditional statements to handle iterable data structures. Here's an example of a for loop:

{% for item in items %}
<li>{{ item }}</li>
{% endfor %}

Filters

Filters allow you to manipulate the output of variables. For example, to convert a date to a specific format:

<p>Today's date is: {{ current_date|date:"F d, Y" }}</p>

Tags and Test Tags

Django templates offer various tags for handling common tasks such as loading other templates or including static files. Test tags allow you to check conditions within the template.

Worked Example

Let's create a simple Django project with a view that displays a list of books and their authors using Django templates.

Setting Up the Project

First, install Django and start a new project:

pip install django
django-admin startproject my_project
cd my_project

Create a new app called books:

python manage.py startapp books

Defining the View and Template

In the books/views.py file, define a view that returns a list of books:

from django.http import HttpResponse
from django.template import loader

def book_list(request):
template = loader.get_template('book_list.html')
context = {
'books': [
{'title': 'The Catcher in the Rye', 'author': 'J.D. Salinger'},
{'title': 'To Kill a Mockingbird', 'author': 'Harper Lee'},
{'title': '1984', 'author': 'George Orwell'}
]
}
return HttpResponse(template.render(context, request))

Create the book_list.html template in the books/templates/books directory:

{% extends "base.html" %}

{% block content %}
<h1>Book List</h1>
<ul>
{% for book in books %}
<li>{{ book.title }} by {{ book.author }}</li>
{% endfor %}
</ul>
{% endblock %}

Creating a Base Template

Create a base template called base.html in the root project directory:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}My Django Template{% endblock %}</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>

Running the View

Finally, add the view to the URL configuration in my_project/urls.py:

from django.contrib import admin
from django.urls import path
from books.views import book_list

urlpatterns = [
path('admin/', admin.site.urls),
path('books/', book_list, name='book_list'),
]

Now you can run the Django development server and access the view at http://localhost:8000/books/.

Common Mistakes

  1. Forgetting to define the context in the view.
  2. Using incorrect syntax for variables, loops, or filters.
  3. Not extending a base template properly.
  4. Overlooking the need to register custom tags or filters.
  5. Failing to handle edge cases when using loops and conditional statements.

Practice Questions

  1. Create a view that displays the current date in the following format: "Month Day, Year".
  2. Modify the book list view to include a search bar that filters books by title.
  3. Implement a custom filter that converts temperatures from Fahrenheit to Celsius.
  4. Create a custom tag that generates a random number between 1 and 100.

FAQ

Q: Why should I use Django templates instead of pure HTML?

A: Django templates allow for dynamic content insertion, looping constructs, and filters, making it easier to manage complex websites and reuse code.

Q: How do I override blocks in a child template?

A: In the child template, you can define the same block as in the parent template and provide your own content within the curly braces.

Q: What are some common pitfalls when using Django templates?

A: Common mistakes include forgetting to define the context in the view, using incorrect syntax for variables, loops, or filters, not extending a base template properly, and failing to handle edge cases when using loops and conditional statements.

Templates (Web Development) | C++ | XQA Learn