四川省建设三类职称网站,wordpress文章关闭缩略图,微商城开发报价,网站建设做什么好✨✨ 欢迎大家来到景天科技苑✨✨
#x1f388;#x1f388; 养成好习惯#xff0c;先赞后看哦~#x1f388;#x1f388; #x1f3c6; 作者简介#xff1a;景天科技苑 #x1f3c6;《头衔》#xff1a;大厂架构师#xff0c;华为云开发者社区专家博主#xff0c;…
✨✨ 欢迎大家来到景天科技苑✨✨ 养成好习惯先赞后看哦~ 作者简介景天科技苑 《头衔》大厂架构师华为云开发者社区专家博主阿里云开发者社区专家博主CSDN全栈领域优质创作者掘金优秀博主51CTO博客专家等。 《博客》Python全栈前后端开发人工智能js逆向App逆向网络系统安全数据分析Djangofastapiflask等框架linuxshell脚本等实操经验网站搭建面试宝典等分享。 所属的专栏flask框架零基础进阶应用实战教学 景天的主页景天科技苑 文章目录 模板继承为什么要用模板继承模板继承案例分析模板继承使用时注意点总结 模板继承
为什么要用模板继承
比如博客园网站点击不同目录上面和右面页面基本是一样的这就可以用模板继承方法不然代码显得很冗余 在模板中可能会遇到以下情况
多个模板具有完全相同的顶部和底部内容多个模板中具有相同的模板代码内容但是内容中部分值不一样弹窗多个模板中具有完全相同的 html 代码块内容侧边栏
像遇到这种情况可以使用 JinJa2 模板中的 模板继承 来进行实现
模板继承是为了重用模板中的公共内容。一般Web开发中继承主要使用在网站的顶部菜单、底部、弹窗。这些内容可以定义在父模板中子模板直接继承而不需要重复书写。
block 标签定义的可重写的内容范围
{% block 区块名称 %} {% endblock 区块名称 %} #我们最好这样写因为如果页面中有很多block不写结束区块名可能会很难分清是哪个区块的结束符{% block 区块名称 %} {% endblock %}例如顶部菜单
{% block menu %}{% endblock menu %}block相当于在父模板中挖个坑当子模板继承父模板时可以进行对应指定同名区块进行代码填充。子模板使用 extends 标签声明继承自哪个父模板一个项目中可以有多个父模板但每个子模板只能继承一个父模板。父模板中定义的区块在子模板中被重新定义在子模板中调用父模板的内容可以使用super()调用父模板声明的区块内容。
模板继承案例分析
视图代码
from flask import Flask, render_templateapp Flask(__name__, template_foldertemplates)app.route(/)
def index():title 站点首页html render_template(index9.html, **locals())return htmlapp.route(/list)
def list():title 商品列表页html render_template(index10.html, **locals())return htmlapp.route(/user)
def user():title 用户中心html render_template(index11.html, **locals())return htmlif __name__ __main__:app.run(debugTrue)父模板代码
templates/common/base.html
!doctype html
html langen
headmeta charsetUTF-8title{{ title }}/title
/head
bodyh1头部公共内容-[菜单]-登录窗口/h1
{# 在父模板挖坑为了能在子模板替换成自己的内容#}{% block main %}{% endblock main %}{% block menu %}{% endblock menu %}{% block footer %}{% endblock footer %}{% block window %}{% endblock window %}
/body
/html子模板代码
extends指令声明这个模板继承自哪
templates/index9.html代码
{% extends common/base.html %}{% block main %}
h1站点首页的主要内容/h1
{% endblock main %}templates/index10.html代码
{% extends common/base.html %}{#在子模板中根据父模板设置的区块名称来定义自己的内容#}
{% block main %}h1商品列表页的商品信息/h1
{% endblock main %}templates/index11.html代码
{#模板继承的目录是基于templates#}
{% extends common/base.html %}浏览器访问首页
商品展示页
用户中心页
模板继承使用时注意点 不支持多继承在同一个模板中不能使用多个extends 为了便于阅读在子模板中使用extends时尽量写在模板的第一行。 不能在一个模板文件中定义多个相同名字的block标签否则会覆盖。 当在页面中使用多个block标签时建议给结束标签endblock补充区块名当多个block嵌套时阅读性更好。
总结
1.模版继承可以让您创建一个基本的“骨架”模版它包含您站点中的全部元素并且可以定义能够被子模版覆盖的 blocks 先定义一个模板在需要替换的地方设置钩子这样有谁想继承时只需要继承模板然后在钩子处做修改。 2.尽量多设置钩子这样子页面可扩展的范围就越多。 3.在钩子处我们可以自定义自己页面的样式js动作等。 4.大大缩减了冗余代码实现相同效果。 5.感兴趣的朋友可以一键三连flask高阶应用持续更新中。