what is {% block content %} and {% endblock content %} for in Django?

Question:

so I just started reading a book on Django (for beginners) and I came across the following code snipet:

<header>

<a href="{% url 'home' %}">Home</a> | <a href="{% url 'about' %}">About</a>

</header>

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

Could anyone possibly explain to me what is the use of {% block content %} and {% endblock content %}? Thank you very much in advance!

Asked By: Nazim Kerimbekov

||

Answers:

That’s where the power of the templates comes from in a sense.

You can create a hierarchy of templates so start with base.html which might be like you’ve got above;

<body>
    {% block content %}
    {% endblock content %}
</body>

Then you can create any other template, home.html for example, and do something like;

{% extends "base.html" %}

{% block content %}
    <h1>Welcome</h1>
    <p>This is the home page</p>
{% endblock content %}

Then you’d reference home.html in django and it’d include the markup from base.py with the content defined in home.html.

That’s the basics, but if you put some templates together using blocks you’ll pick it up.

Answered By: markwalker_

block is used for overriding specific parts of a template.

In your case, you have a block named content and this is supposed to be overridden by children that inherit from this template.

From the examples at The Django Docs

Template to be extended, named base.html

<head>
    <link rel="stylesheet" href="style.css">
    <title>{% block title %}My amazing site{% endblock %}</title>
</head>

Overriding Child template

{% extends "base.html" %}

{% block title %}My amazing blog{% endblock %}

“My amazing site” will be overriden by the child and then display “My amazing blog”

Answered By: Cup of Java

For example, you have code excerpts from 2 files:

base.html:

<body bgcolor="cyan">

    {% block content %}

    {% endblock %}
    
</body>

home.html:

{% extends 'base.html' %}

{% block content %}
<h1>Hello World from Abhishek</h1>

{% endblock %}

here in home.html, the attributes of base.html will be extended but by using {% block content %} and {% endblock %} you will be able to override the code block of home.html upon the attributes of base.html

This is Jinja template for a dynamic website.

Answered By: Abhishek Nath

That is simply django’s template inheritance. It basically means that a block of content from another html file has been imported into that html file you’re currently on.

Answered By: Kevin Ramogi Obuya
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.