什么是模板继承?
模板继承是Django模板框架中的一种特性,它允许开发者将模板划分为可重用的块。
在模板继承中,基础模板定义了一系列“可填充”块,在继承这个模板的各个子模板中可以填充这些块。这种方法将模板分成了可重用的部分,使得开发者可以更加有效地组织模板层次结构,并实现模板的复用。
模板继承的基本语法
模板继承是通过两个特殊的标签来完成的:{% extends %} 和 {% block %}。
extends标签
extends标签定义了父模板,它告诉Django这个模板是从哪个模板继承而来的。这个标签放在子模板文件的第一行,并且必须是第一个标签。
{% extends "base.html" %}
在上面的例子中,子模板将从叫做“base.html”的模板中继承。
block标签
block标签定义了可填充的块,它用来指定在父模板中某个位置可以填充什么内容。
{% block content %}这是子模板的内容{% endblock %}
在上面的例子中,子模板将覆盖父模板中名为“content”的块,并用自己的内容来填充。
模板继承的例子
为了演示模板继承的基本用法,我们来创建一个包含三个模板的简单Web应用。
首先,我们创建一个名为“base.html”的基础模板:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}这是默认标题{% endblock %}</title>
</head>
<body>
<header>
<h1>网站标题</h1>
<nav>
<a href="#">链接1</a>
<a href="#">链接2</a>
<a href="#">链接3</a>
</nav>
</header>
<div id="content">
{% block content %}这是默认内容{% endblock %}
</div>
<footer>版权信息</footer>
</body>
</html>
在上面的模板中,我们定义了一个名为“title”的块和一个名为“content”的块。其中,“title”块用来定义网页的标题,而“content”块则用来定义页面的主要内容。
接下来,我们将创建一个子模板,它继承自“base.html”:
{% extends "base.html" %}
{% block title %}这是子模板的标题{% endblock %}
{% block content %}
<p>这是子模板的内容。</p>
<p><strong>这里有一个重要的信息!</strong></p>
{% endblock %}
在上面的子模板中,我们重定义了“title”块,并在“content”块中加入了一些带标签的内容。
现在,我们再次创建一个子模板:
{% extends "base.html" %}
{% block content %}
<p>这是另一个子模板的内容。</p>
<p>它不定义标题,因此使用基础模板中的默认标题和内容。</p>
{% endblock %}
在上面的子模板中,我们只覆盖了“content”块。因此,它将使用基础模板中定义的默认标题和内容。
总结
模板继承是Django模板框架中的一种重要的特性,它通过基础模板和子模板之间的继承关系,实现了模板的复用和组织。在模板继承中,基础模板定义了一系列可填充的块,在子模板中可以重定义这些块,来达到自己的需求。