模板继承的使用场景是,你写好了一个“骨架”模板后,可以在子模板引用父模板,并替换或修改父模板的某些部分。
举个例子,我们定义一个显示图书信息的父模板,命名为 base.html
:
<html>
<body>
<h4>图书信息</h4>
<p>书名:{% block title %}书名(请自定义){% endblock %}</p>
<p>作者:{% block author %}作者名(请自定义){% endblock %}</p>
</body>
</html>
然后创建一个子模板,在子模板引用 base.html
:
<html>
<body>
{% extends "base.html" %}
{% block title %}红楼梦{% endblock %}
{% block author %}曹雪芹{% endblock %}
</body>
</html>
extends
标签的作用是,告诉模版引擎本模版继承了 base.html
作为父模板。
这时候我们的页面变成了:
block
标签的部分已经被自定义的内容替换掉了。如果不填写自定义的内容,将会继续使用父模板中的内容。
如果需要获取父模板中的 block 的内容,可以使用 {{ block.super }}
变量。如果你想要在父模板 block 中新增内容而不是完全覆盖它,它将非常有用。
用 {{ block.super }}
获取父模板 block 内容:
<html>
<body>
{% extends "base.html" %}
{% block title %}红楼梦{% endblock %}
{% block author %} {{ block.super }} {% endblock %}
</body>
</html>
给父模板 block 增加新内容:
<html>
<body>
{% extends "base.html" %}
{% block title %}红楼梦{% endblock %}
{% block author %} {{ block.super }}新增加的内容 {% endblock %}
</body>
</html>