Django 模板:通过扩展模板覆盖包含的子模板块

作者:编程家 分类: django 时间:2025-12-20

使用Django模板时,我们经常会遇到需要在父模板中包含子模板的情况。然而,有时候我们希望对子模板的某个特定部分进行修改或覆盖。这时,我们可以通过扩展模板来实现这个需求。

在Django中,我们可以使用{% block %}标签来定义一个模板块,然后在父模板中使用{% extends %}标签来继承子模板,并使用{% block %}标签来覆盖或修改子模板的模板块。

下面是一个简单的例子,展示了如何通过扩展模板来覆盖包含的子模板块:

父模板(base.html):

{% block title %}My Website{% endblock %}

{% block content %}

Welcome to my website!

This is the default content.

{% endblock %}

子模板(home.html):

{% extends "base.html" %}

{% block title %}Home - My Website{% endblock %}

{% block content %}

Welcome to my home page!

This is the content for the home page.

{% endblock %}

在上面的例子中,父模板base.html定义了一个名为content的模板块,并给它提供了默认内容。子模板home.html通过{% extends %}标签继承了父模板,并使用{% block content %}标签来覆盖了父模板中的content模板块。

当我们渲染子模板home.html时,最终生成的HTML将会是:

Home - My Website

Welcome to my home page!

This is the content for the home page.

从上面的例子可以看出,通过扩展模板,我们可以轻松地覆盖子模板中的特定部分,而不需要重写整个子模板。

案例代码:

假设我们有一个web应用,其中包含一个父模板和一个子模板。我们希望在子模板中覆盖父模板的标题和内容,以展示不同页面的不同信息。

父模板(base.html):

html

{% block title %}My Website{% endblock %}

{% block content %}

Welcome to my website!

This is the default content.

{% endblock %}

子模板(home.html):

html

{% extends "base.html" %}

{% block title %}Home - My Website{% endblock %}

{% block content %}

Welcome to my home page!

This is the content for the home page.

{% endblock %}

在上面的例子中,我们在子模板中使用标签给标题添加了强调效果,并在内容部分展示了特定页面的内容。

当我们渲染子模板home.html时,最终生成的HTML将会是:

html

<strong>Home - My Website</strong>

Welcome to my home page!

This is the content for the home page.

通过扩展模板,我们可以在子模板中轻松地修改父模板的特定部分,以满足不同页面的需求。