【案例演练】测试器与模板继承
测试器
测试器即对文件内变量名、变量类型等文件进行判断
- 语法
{% if 判断条件 %}...代码块...
{% elif 判断条件 %}...代码块...
{% else %}...代码块...
{% endif %}
- 实例
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>{% set name='孟' %}{% if names %}<p>有name:{{ names }}</p>{% elif name %}<p>有name:{{ name }}</p>{% else %}<p>没有name;else</p>{% endif %}
</body>
</html>
执行代码,可以看到页面打印:
也就是说代码走了elif
。
上面代码也可这样写:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>{% set name='孟' %}{% if names is undefined %}<p>有name:{{ names }}</p>{% elif name is defined %}<p>有name:{{ name }}</p>{% else %}<p>没有name;else</p>{% endif %}
</body>
</html>
模板继承
与方法继承相似
语法
{% extends '继承文件路径及后缀' %}
继承的好处
可以复用父类代码,节省开发时间
可以根据需求进行重写,比较灵活
如果想让子模板实现一些自定义内容,只需要使用
block
标签
实例
新建如下页面:
命名为base.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>模板继承</title><style>* {list-style: none;text-decoration: none;}.header {height: 60px;background: #3a3a3a;color: #fff;margin-bottom: 20px;}.header .nav-group {margin-left: 10px;}.header .nav-group li {float: left;line-height: 60px;margin: 0px 20px;}.nav-group li a {color: #fff;}.footer {height: 100px;background: #3a3a3a;}.footer p {color: #fff;margin-left: 30px;padding-top: 20px;}.container{overflow: hidden;}.left-container{width: 800px;height: 300px;background: cadetblue;float: left;}.right-container{width: 600px;height: 500px;background: antiquewhite;float: right;}</style>
</head>
<body><div class="header"><ul class="nav-group"><li><a href="#">新闻</a></li><li><a href="#">音乐</a></li><li><a href="#">贴吧</a></li><li><a href="#">视频</a></li></ul></div><div class="container"><div class="left-container">左面的盒子</div><div class="right-container">右面的盒子</div></div><div class="footer"><p>页面底部</p></div>
</body>
</html>
现在我们想增加两个页面,分别为detail.html
和front_page.html
,如果把代码原封不动的复制过去也可以,但是一旦页面有改动,那这三个文件你就得分别取改代码,所以这里就用继承就会方便很多了:
detail.html
{% extends 'base.html' %}
front_page.html
同上,这样就通过继承复制出了两个相同的页面了。在app.py
文件分别新增方法即可:
@app.route('/detail/')def detail():return flask.render_template('detail.html')@app.route('/frontpage/')def frontPage():return flask.render_template('front_page.html')
现在如果在detail.html
页面要增加新内容怎么办呢?就是之前提过的,block
标签上场了。
语法
{% block 变量名 %}{% endblock %}
实例
将之前部分代码改为:
<div class="container"><div class="left-container">{% block left %}左面的盒子{% endblock %}</div><div class="right-container">{% block right %}右面的盒子{% endblock %}</div>
</div>
然后在detail.html
中修改代码为:
{% extends 'base.html' %}{% block left %} <div><table border="2px" bordercolor='red'><thead><tr><td>编号</td><td>课程</td></tr></thead><tbody><tr><td>1</td><td>Flask</td></tr></tbody></table></div>{% endblock %}
在detail.html
中的block
添加代码后,就相当于把里面的代码添加到了base.html
文件的block
里面。
保存,detail.html
页面变为:
以上内容即为模板继承。但是大家也发现左面盒子里面的内容全部被重写了,这时候只需要继承父类即可:
{{ super() }}
在detail.html
中增加上面代码即可:
{% extends 'base.html' %}{% block left %}{{ super() }} <div><table border="2px" bordercolor='red'><thead><tr><td>编号</td><td>课程</td></tr></thead><tbody><tr><td>1</td><td>Flask</td></tr></tbody></table></div>{% endblock %}
现在如果说右侧也要有一个相同的table
该怎么办呢?当然不需要再重复代码,只需要在对应的block
中调用上一个block的名字
:{{ self.block名字 }}
即可。
- 实例
detail.html
{# 模板继承 #}{% extends 'base.html' %}{# 利用block修改模板内容 #}
{% block left %}{{ super() }} <div><table border="2px" bordercolor='red'><thead><tr><td>编号</td><td>课程</td></tr></thead><tbody><tr><td>1</td><td>Flask</td></tr></tbody></table></div>{% endblock %}{% block right %}{{ super() }}{{ self.left() }}
{% endblock %}
如果对软件测试、接口测试、自动化测试、面试经验交流感兴趣,可以加软件测试交流:1085991341,还会有同行一起技术交流。
执行后右侧盒子就会和左侧一样了。
以上内容希望对你有帮助,有被帮助到的朋友欢迎点赞,评论。
【案例演练】测试器与模板继承相关推荐
- WMI 测试器 (wbemtest.exe) 演练
现在,您对可用于浏览和查看 CIM 的工具已经有了一些认识,让我们使用 WMI 测试器 (wbemtest.exe) 来检查 Win32_Process 类定义并修改清单 2,以便从在您的本地计算机上 ...
- Flask框架之模板继承与案例05
Flask框架之模板继承与案例05 一,模版继承 二,静态文件的配置 1.这里列举一个小例子: 三,模版案例(制作豆瓣评分页面) 1.效果图: 2.数据准备: 3.代码链接 一,模版继承 Flask中 ...
- Flask框架四:模板继承以及豆瓣案例
1.模板继承 ①为什么会有模板继承而不用include调用模板:include是引用模板的标签,将模板的内容直接显示,但是当页面有变化的时候,比如多了一个侧边栏的内容,或者想改输入框为按钮,这时候就要 ...
- 8 - 9 template两大功能 : simple_tag、模板继承
2019独角兽企业重金招聘Python工程师标准>>> template 两大功能 一些基本语法 比如 if for jquery引入 修改时间格式 模板继承 我们在生产中会发现写的 ...
- 【Flask】Jinja2之测试器的应用
测试器总是返回一个布尔值,它可以用来测试一个变量或者表达式,使用"is"关键字来进行测试. 测试器本质上也是一个函数,它的第一个参数就是待测试的变量,在模板中使用时可以省略去.如果 ...
- 【Flask】Jinja2之模板继承
一般我们的网站虽然页面多,但是很多部分是重用的,比如页首,页脚,导航栏之类的.对于每个页面,都要写这些代码,很麻烦. Flask的Jinja2模板支持模板继承功能,省去了这些重复代码. 块和继承 案例 ...
- Python自动化之模板继承和cookie
request请求头信息 type(request) //查看类 from django.core.handlers.wsgi import WSGIRequest结果会以字典的形式存在 reques ...
- 子模板继承父模板示例_模板设计模式示例
子模板继承父模板示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重 ...
- Jinja2模板与模板继承
Jinja2 两个概念: Jinja2:是 Python 下一个被广泛应用的模板引擎,是由Python实现的模板语言,他的设计思想来源于 Django 的模板引擎,并扩展了其语法和一系列强大的功能,其 ...
最新文章
- 基于Matlab的标记分水岭分割算法(imreconstruct)
- c语言用户输入编程,C语言入门教程-Printf:读取用户输入
- MyCat好的博文收集
- SpringCloud版本命名
- ASP.NET MVC 重点教程一周年版 第七回 UrlHelper 【转】
- 高通qcc芯片天梯图_芯片性能天梯榜“爆冷”,骁龙888无法撼动麒麟9000的王位...
- python import pandas报错找不到_扎心!“我学了半年 Python,还是找不到工作”
- 寻找固定的和----2013年2月26日
- Flask-Uploads文件上传的简单使用
- 《深入分析Java Web技术内幕》读书笔记
- 移动硬盘测试扩容卡软件,U盘扩容检测教程,优盘容量真实性检测,TF卡移动硬盘SD卡内存卡...
- 英语的句号在c语言中是什么意思,英语标点符号的用法
- access连接mysql很慢_怎么解决ACCESS数据库太大造成运行慢的问题?
- 文本文件编码 email编码
- SN74LVC2G04DRLR 德州仪器TI 反相器
- 1101 -- 正弦和余弦
- 和平精英电脑版服务器未响应,和平精英电脑版为什么卡顿 电脑版卡顿解决方法...
- MD5算法的编程实现
- PS 2021安装插件提示”无法加载,未经签署“怎么办?ps2021插件未经正确签署解决办法!
- thingsboard-部件库开发 之 rpc-部件开发