模板继承
Flask
中的模板可以继承,通过继承可以把模板中许多重复出现的元素抽取出来,放在父模板中,并且父模板通过定义block
给子模板开一个口,子模板根据需求,通过block
对原有内容进行修改
应用
- 创建父类模板
base.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="base.css" /> <title>{% block title%}父类{% endblock %}</title> {% block head %}{% endblock %} </head> <body> <div id="body">{% block body%}{% endblock %}</div> <div id="footer">{% block footer%}© Copyright 2008 by<a href="#">空链接</a>{% endblock %}</div> </body> </html>
父模板中,抽取了所有模板都需要用到的元素html
、body
等,并且对于一些所有模板都要用到的样式文件style.css
也进行了抽取,同时对于一些子模板需要重写的地方,比如title
、head、body都定义成了
block`,然后子模板可以根据自己的需求,再具体的实现
- 创建子类
ex1.html
继承父类<!--添加新内容--> <p>子类添加的新内容</p> <!--继承父类--> {% extends 'base.html' %} <!--修改title内容--> {% block title %} 子类 {% endblock %} <!--修改body内容--> {% block body %} <p>子类覆盖body的新内容</p> {% endblock %} <!--使用super()函数继承父类的内容并添加新内容--> {% block footer %} {{super()}} <p>地址:太阳系地球村 邮编xxxxxx</p> {% endblock %}
- 在写
{% extends 'base.html' %}
语句之前可以自由添加新的非继承的内容 - 子模板内容必须写在父模板定义的接口中,写在接口外面的内容不会被渲染