一、宏

类似于python中的函数,宏的作用就是在模板中重复利用代码,避免代码冗余。

Jinja2支持宏,还可以导入宏,需要在多处重复使用的模板代码片段可以写入单独的文件,再包含在所有模板中,以避免重复。

  1. 定义宏
{% macro input() %}<input type="text"name="username"value=""size="30"/>
{% endmacro %}
  1. 调用宏
{{ input() }}
  1. 定义带参数的宏
{% macro input(name,value='',type='text',size=20) %}<input type="{{ type }}"name="{{ name }}"value="{{ value }}"size="{{ size }}"/>
{% endmacro %}
  1. 调用宏,并传递参数
{{ input(value='name',type='password',size=40)}}


5. 把宏单独抽取出来,封装成html文件,其它模板中导入使用
文件名可以自定义macro.html:

{% macro function() %}<input type="text" name="username" placeholde="Username"><input type="password" name="password" placeholde="Password"><input type="submit">
{% endmacro %}

在其它模板文件中先导入,再调用

{% import 'macro.html' as func %}
{{ func.function() }}


二、模板继承

模板继承是为了重用模板中的公共内容。一般Web开发中,继承主要使用在网站的顶部菜单、底部。这些内容可以定义在父模板中,子模板直接继承,而不需要重复书写。

{% block top %}``{% endblock %}标签定义的内容,相当于在父模板中挖个坑,当子模板继承父模板时,可以进行填充。

子模板使用extends指令声明这个模板继承自哪?父模板中定义的块在子模板中被重新定义,在子模板中调用父模板的内容可以使用super()。

  1. 父模板:base.html
{% block top %}顶部菜单{% endblock top %}{% block content %}{% endblock content %}{% block bottom %}底部{% endblock bottom %}
  1. 子模板:
  {% extends 'base.html' %}{% block content %}需要填充的内容{% endblock content %}

模板继承使用时注意点

  1. 不支持多继承。
  2. 为了便于阅读,在子模板中使用extends时,尽量写在模板的第一行。
  3. 不能在一个模板文件中定义多个相同名字的block标签
  4. 当在页面中使用多个block标签时,建议给结束标签起个名字,当多个block嵌套时,阅读性更好。

三、包含

Jinja2模板中,除了宏和继承,还支持一种代码重用的功能,叫包含(Include)。它的功能是将另一个模板整个加载到当前模板中,并直接渲染

示例:

include的使用

{% include 'hello.html' %}

包含在使用时,如果包含的模板文件不存在时,程序会抛出TemplateNotFound异常,可以加上ignore missing关键字。如果包含的模板文件不存在,会忽略这条include语句。

示例:

include的使用加上关键字ignore missing

{% include 'hello.html' ignore missing %}

四、总结宏、继承、包含:

  1. 宏(Macro)、继承(Block)、包含(include)均能实现代码的复用
  2. 继承(Block)的本质是代码替换,一般用来实现多个页面中重复不变的区域。
  3. 宏(Macro)的功能类似函数,可以传入参数,需要定义、调用。
  4. 包含(include)是直接将目标模板文件整个渲染出来

Web框架——Flask系列之宏、继承、包含(十八)相关推荐

  1. Web框架——Flask系列之session机制(十六)

    一.session机制图解 二.设置和获取session from flask import Flask,sessionapp = Flask(__name__)# flask的session需要用到 ...

  2. Web框架——Flask系列之Flask简介(一)

    一.Web应用程序作用 Web(World Wide Web)诞生最初的目的,是为了利用互联网交流工作文档 二.关于Web框架 (一)什么是Web框架? 已经封装好了一段代码,协助程序快速开发,相当于 ...

  3. Web框架——Flask系列之Flask-SQLAlchemy数据库的基本操作(九)

    数据库基本操作 在Flask-SQLAlchemy中,插入.修改.删除操作,均由数据库会话管理. 会话用 db.session 表示.在准备把数据写入数据库前,要先将数据添加到会话中然后调用db.se ...

  4. Web框架——Flask系列之Flask-SQLAlchemy安装与使用 定义数据模型(八)

    Flask-SQLAlchemy安装及设置 SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换 ...

  5. Web框架——Flask系列之WTF表单验证练习(七)

    一.Web表单 web表单是web应用程序的基本功能. 它是HTML页面中负责数据采集的部件.表单有三个部分组成:表单标签.表单域.表单按钮.表单允许用户输入数据,负责HTML页面数据采集,通过表单将 ...

  6. Web框架——Flask系列之蓝图Blueprint(二十一)

    一.为什么学习蓝图? 我们学习Flask框架,是从写单个文件,执行hello world开始的.我们在这单个文件中可以定义路由.视图函数.定义模型等等.但这显然存在一个问题:随着业务代码的增加,将所有 ...

  7. Web框架——Flask系列之数据库迁移(二十)

    一.Flask-Migrate扩展 在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库.最直接的方式就是删除旧表,但这样会丢失数据. 更好的解决办法是使用数据库迁移框架,它可以追踪数据库模 ...

  8. Web框架——Flask系列之abort函数与自定义异常处理(十三)

    一.abort函数 使用abort函数可以立即终止视图函数的执行,并可以返回给前端特定的信息 传递状态码信息,必须是标准的http状态码 abort(403) 传递响应体信息 resp = Respo ...

  9. Web框架——Flask系列之Flask创建app对象 路由(十二)

    一.初始化参数 import_name: 当前模块名 static_url_path:静态资源的url前缀,默认为'static' static_folder: 静态文件目录名,默认'static' ...

最新文章

  1. jmeter性能测试入门简介
  2. java中表示根号三_Java命名规范
  3. Apache Camel 2.18 –即将推出的功能的亮点
  4. 设置Markdown中展示Liquid(Jekyll)但不解析的方式
  5. 【Flink】Flink kafka报错 Auto-commit of offsets failed for group Offset commit failed with a retriable
  6. Innobackupx工具命令简单解析
  7. POJ NOI MATH-7826 分苹果
  8. Jquery和angularjs获取check框选中的值小技巧
  9. 矩阵分解(MF)方法及代码
  10. HTML+JS调用摄像头
  11. mysql表名命名规范_数据库表名的命名规范
  12. 《剑指offer》66道算法题合集(java实现)
  13. KICAD——手动生成嘉立创可识别的BOM和POS文件
  14. 宝塔站点配置SSL证书
  15. (据说是)鏼爷和吴凯路爷爷出的NOIP模拟神题集锦
  16. Java岗大厂面试百日冲刺【Day46】— Linux2 (日积月累,每日三题)
  17. DVM和ART的区别详解
  18. 苹果x屏幕失灵乱跳_苹果iphone11 pro max屏幕触摸失灵怎么办?
  19. 2008¸ß¿¼×÷ÎĸãЦ¼¯
  20. python爬取税务局并将数据保存在Excel

热门文章

  1. git 报错:Please make sure you have the correct access rights and the repository exists
  2. python下载图片的命令_网上的图片不知道怎么批量下载?python教你怎么把网站上面的图片都爬下来...
  3. 网络请求数据解析时,判断数据是否为空
  4. matlab中的qr函数
  5. 关于bc中小数点length,scale,(())以及进制转换
  6. Python简单的抓取静态网页内容
  7. Web框架 Bottle 、Flask 、Tornado
  8. C#操作Excel(1)Excel对象模型
  9. [jstl] forEach标签使用
  10. linux下unix timestamp 与 可视化时间/常规时间进行转换