🧱 Django Add Master Template – Build Reusable Layouts with Template Inheritance (2025)
🧲 Introduction – What Is a Master Template?
In Django, a master template (also called a base template) provides a common layout structure—like a header, footer, and navigation bar—that all other pages can inherit. This promotes DRY (Don’t Repeat Yourself) coding, faster updates, and consistent design across your site.
🎯 In this guide, you’ll learn:
- How to create a base (master) template
- How to extend it in child templates
- How to use
{% block %}and{% extends %} - Best practices for maintainable template architecture
📁 Step 1: Create the Master Template
Inside your app or a global templates/ directory:
templates/base.html
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}My Site{% endblock %}</title>
<link rel="stylesheet" href="{% static 'css/styles.css' %}">
</head>
<body>
<header>
<h1>My Django Site</h1>
<nav>
<a href="/">Home</a> |
<a href="/blog/">Blog</a>
</nav>
</header>
<hr>
<main>
{% block content %}{% endblock %}
</main>
<hr>
<footer>
<p>© 2025 My Django App</p>
</footer>
</body>
</html>
✅ This becomes your layout foundation with replaceable content blocks.
🧱 Step 2: Use extends in a Child Template
Example for a blog post page:
templates/blog/post_detail.html
{% extends 'base.html' %}
{% block title %}{{ post.title }}{% endblock %}
{% block content %}
<h2>{{ post.title }}</h2>
<p>{{ post.content }}</p>
<small>Published on {{ post.published|date:"F j, Y" }}</small>
{% endblock %}
✔️ Only the content that changes needs to be written.
🌐 Step 3: Set the Template Directory in settings.py
Make sure Django can find the base.html:
# settings.py
TEMPLATES = [
{
...
'DIRS': [BASE_DIR / "templates"],
...
}
]
✅ If using app-level templates, structure should be:yourapp/templates/yourapp/base.html
📋 Common Template Blocks
| Block Name | Purpose |
|---|---|
title | Page title (inside <title>) |
content | Main body content |
sidebar | Optional side menu or widget |
scripts | JavaScript at the bottom |
✅ Best Practices
- Name blocks clearly:
content,title,footer, etc. - Don’t repeat layout HTML in every file—use
{% extends %} - Centralize common scripts and CSS in
base.html - Add
{% block scripts %}at the end of<body>for optional JS
📌 Summary – Recap & Next Steps
🔍 Key Takeaways:
- A master template ensures layout consistency and reusability
- Use
{% extends 'base.html' %}to inherit from it - Define
{% block %}sections that child templates can override
⚙️ Real-World Relevance:
Master templates power scalable websites, blogs, admin panels, and e-commerce platforms—saving hours in design and code duplication.
❓ Frequently Asked Questions (FAQ)
❓ What is the difference between include and extends?
✅ extends is for inheritance.
✅ include is for inserting reusable chunks (e.g., header, footer).
❓ Can I have multiple master templates?
✅ Yes. You can have different base templates for admin, public pages, dashboards, etc.
❓ Where should I place the base.html?
✅ Either in a global templates/ folder or inside app/templates/app/.
❓ How do I load static files like CSS in base templates?
✅ Use {% load static %} and:
<link href="{% static 'css/style.css' %}" rel="stylesheet">
❓ Can I nest blocks inside other blocks?
✅ Yes, but be cautious. Nesting works, but overdoing it may reduce readability.
Share Now :
