模板的继承 extends
模板的继承有点像 ppt 中的母版一样,我们定义好一个骨架,将一个页面都写好,大部分不用变动,需要变动的部分使用 block 标签包裹起来:
{% block title %}
<title>base</title> <!-- 如果扩写了就是扩写的,不扩写就还是用base -->
{% endblock %}
这样定义的好处是,可以在继承它的模板中,重写这个 block,不重写就按母版来显示。 比如我们定义了一个 base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
{% block title %}
<title>base</title> <!-- 如果扩写了就是扩写的,不扩写就还是用base -->
{% endblock %}
<!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<style>
* {
margin: 0;
padding: 0;
}
.header {
width: 100%;
height: 50px;
background-color: #369;
}
</style>
</head>
<body>
<div class="header"></div>
<div class="container">
<div class="row">
<div class="col-md-3">
{% include 'aside.html' %}
</div>
<div class="col-md-9">
{% block content %}
<h4>content</h4>
{% endblock %}
</div>
</div>
</div>
</body>
</html>
然后在 index.html 中继承这个 base.html
{% extends 'base.html' %}
{% block title %}
<title>index</title>
{% endblock %}
{% block content %}
<div class="col-md-9">
<h3>index</h3>
<p>index content</p>
</div>
{% endblock %}
这样就是使用 base.html 作为母版,并在 index.html 中重写了 title、content 两个部分。
注意:如果你在模版中使用 {% extends %} 标签,它必须是模版中的第一个标签。其他的任何情况下,模版继承都将无法工作。
在使用继承的情况下,尽可能将可能会变动的数据,都包裹在 block 中,因为 block 即使在后续的页面不重写,也不影响模板的解析,而需要重写的时候就更方便。
同样地,如果后续写到某一块,发现多个页面都需要使用到,那么这时候,就把添加到 base.html 中去,让它成为母版的一部分。