测试器

测试器即对文件内变量名、变量类型等文件进行判断

  • 语法
{% 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.htmlfront_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,还会有同行一起技术交流。
执行后右侧盒子就会和左侧一样了。

以上内容希望对你有帮助,有被帮助到的朋友欢迎点赞,评论。

【案例演练】测试器与模板继承相关推荐

  1. WMI 测试器 (wbemtest.exe) 演练

    现在,您对可用于浏览和查看 CIM 的工具已经有了一些认识,让我们使用 WMI 测试器 (wbemtest.exe) 来检查 Win32_Process 类定义并修改清单 2,以便从在您的本地计算机上 ...

  2. Flask框架之模板继承与案例05

    Flask框架之模板继承与案例05 一,模版继承 二,静态文件的配置 1.这里列举一个小例子: 三,模版案例(制作豆瓣评分页面) 1.效果图: 2.数据准备: 3.代码链接 一,模版继承 Flask中 ...

  3. Flask框架四:模板继承以及豆瓣案例

    1.模板继承 ①为什么会有模板继承而不用include调用模板:include是引用模板的标签,将模板的内容直接显示,但是当页面有变化的时候,比如多了一个侧边栏的内容,或者想改输入框为按钮,这时候就要 ...

  4. 8 - 9 template两大功能 : simple_tag、模板继承

    2019独角兽企业重金招聘Python工程师标准>>> template 两大功能 一些基本语法 比如 if for jquery引入 修改时间格式 模板继承 我们在生产中会发现写的 ...

  5. 【Flask】Jinja2之测试器的应用

    测试器总是返回一个布尔值,它可以用来测试一个变量或者表达式,使用"is"关键字来进行测试. 测试器本质上也是一个函数,它的第一个参数就是待测试的变量,在模板中使用时可以省略去.如果 ...

  6. 【Flask】Jinja2之模板继承

    一般我们的网站虽然页面多,但是很多部分是重用的,比如页首,页脚,导航栏之类的.对于每个页面,都要写这些代码,很麻烦. Flask的Jinja2模板支持模板继承功能,省去了这些重复代码. 块和继承 案例 ...

  7. Python自动化之模板继承和cookie

    request请求头信息 type(request) //查看类 from django.core.handlers.wsgi import WSGIRequest结果会以字典的形式存在 reques ...

  8. 子模板继承父模板示例_模板设计模式示例

    子模板继承父模板示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重 ...

  9. Jinja2模板与模板继承

    Jinja2 两个概念: Jinja2:是 Python 下一个被广泛应用的模板引擎,是由Python实现的模板语言,他的设计思想来源于 Django 的模板引擎,并扩展了其语法和一系列强大的功能,其 ...

最新文章

  1. 基于Matlab的标记分水岭分割算法(imreconstruct)
  2. c语言用户输入编程,C语言入门教程-Printf:读取用户输入
  3. MyCat好的博文收集
  4. SpringCloud版本命名
  5. ASP.NET MVC 重点教程一周年版 第七回 UrlHelper 【转】
  6. 高通qcc芯片天梯图_芯片性能天梯榜“爆冷”,骁龙888无法撼动麒麟9000的王位...
  7. python import pandas报错找不到_扎心!“我学了半年 Python,还是找不到工作”
  8. 寻找固定的和----2013年2月26日
  9. Flask-Uploads文件上传的简单使用
  10. 《深入分析Java Web技术内幕》读书笔记
  11. 移动硬盘测试扩容卡软件,U盘扩容检测教程,优盘容量真实性检测,TF卡移动硬盘SD卡内存卡...
  12. 英语的句号在c语言中是什么意思,英语标点符号的用法
  13. access连接mysql很慢_怎么解决ACCESS数据库太大造成运行慢的问题?
  14. 文本文件编码 email编码
  15. SN74LVC2G04DRLR 德州仪器TI 反相器
  16. 1101 -- 正弦和余弦
  17. 和平精英电脑版服务器未响应,和平精英电脑版为什么卡顿 电脑版卡顿解决方法...
  18. MD5算法的编程实现
  19. PS 2021安装插件提示”无法加载,未经签署“怎么办?ps2021插件未经正确签署解决办法!
  20. thingsboard-部件库开发 之 rpc-部件开发

热门文章

  1. [live555]rtsp直播基于live555的实现
  2. QT5实现一个时钟桌面并打包部署
  3. python爬虫抽取武侠小说
  4. windows网络驱动故障错误码56
  5. openlayers之轨迹回放(附加暂停、继续播放功能)
  6. 手机号码会消亡吗?不会!
  7. SQL--附加数据库拒绝访问
  8. 实现录制电脑屏幕操作内容
  9. ArcMap 字段计算器(Field Calculator)的使用总结
  10. 像素坐标到世界坐标的转换