Flask开发(十)Jinja2模板 模板的继承
内容纲要
本篇导读:
- 继承语法
- 块的概念
一个系统网站往往需要统一的结构,这样看起来比较整洁。比如,一个页面中都有标题、内容显示、底部等几个部分。如果在每一个页面都进行这几部分的编写,那么整个网站会有很多的冗余部分,而编写的网页程序也不美观。这是可以采用模板继承,即将相同部分提取出来,形成一个base.html,具有这些相同部分的网页通过继承base.html来得到相应的模块。
1.模板继承的语法
{% extends "模板名称" %}
2.块的概念
模板继承包含基本模板和子模板。其中,基本模板里包含了网站里基本元素的基本骨架,但是里面有一些空的或不完善的块(block)需要用字幕版来填充。
在父模板中:
{% block block的名称 %} {% endblock %}
在子模板中:
{% block block的名称 %} 子模板的代码 {% endblock %}
在templates中新建base.html、index.html、product.html三个文件,base为基类,index和product文件作为子类去继承基类的的本内容。
base.html文件内容如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %}{% endblock %}</title> </head> <body> {% block body %} 这是基类中的内容 {% endblock %} </body> </html>
index.html文件内容如下:
{% extends "base.html" %} {% block body %} {{ super() }} <h4>这是首页的内容</h4> <a href="/product">点击此处跳转产品列表页</a> {% endblock %}
product.html文件的内容为:
{% extends "base.html" %} {% block title %}产品列表页{% endblock %} {% block body %} <h4>这是产品列表页的内容</h4> 取得的网页标题内容:<h4>{{ self.title() }}</h4> {% endblock %}
app.py文件的内容如下:
from flask import Flask,render_template app = Flask(__name__) @app.route('/') def hello_world(): return render_template("index.html") @app.route('/product') def product(): return render_template("product.html") if __name__ == '__main__': app.run(debug=True)
运行效果如下:
默认情况下,子模板如果实现了父模板中定义的block,那么子模板中的block会覆盖父模板中的block。如果在子模板中保持父模板中的代码,那么可以调用{{ super() }}来实现。
如果想要在一个block中调用其他block中的代码,可以通过{{ self.其他block名称() }}来实现。
[successbox title="本篇习题"]
1.使用for语句,新疆一个工程,打印出九九乘法表。
2.在视图函数中定义一个字典books,请在模板中遍历出字典的所有属性。
[/successbox]
阅读剩余
版权声明:
作者:雪落长安
链接:https://blog.wlbc321.cn/index.php/2021/05/21/flask10/
文章版权归作者所有,未经允许请勿转载。
THE END