Jinja2是python默认的模板引擎,用于后台渲染网页和解释模板逻辑,本节课程是关于Jinja2与Flask、html的组合应用学习。
1.Jinia2 基础 Jinja2 中需要使用某些特殊字符包含待解析执行的代码,不被包含的代码则不被解析处理,主要有三—— {%...%} #可以被执行的代码,例如循环语句、继承语法 {{...}} #包含Python对象,解析它们的值,常见于打印 {#...#} #生成注释,这些注释不会被处理,但也不会输出到 html 源码中。
2.变量
在 Jinja2 中,变量可以通过{{ variable }}来显示,可以通过 . 来访问变量的属性,如果传入的变量一个字典,还可以通过 . 来访问字典的字段,例如:
运行效果
PS:当 Jinja2 访问一个不存在的属性时,其返回空值而不是异常,与python有别。
3.逻辑比较
Jinja2 的逻辑比较通过 if...elif...else...endif 实现,结构上与python大同小异,但必须用{%...%}包裹,且最后用{% endif %}结尾,具体代码如下:
运行效果
4.循环控制
同上,循环控制在 Jinja2 中结构依然是通过 for...in... 实现,除了必须{%...%}包裹,结尾一样需要{% endfor %}标记。
运行效果
5.宏
Jinja2 中的宏相当于python的函数,可以将html代码块写成一个宏,方便随时调用,关键字是macro。
运行效果
练习题1:
增加逻辑比较和循环控制——{%if...else%} + {%for tag in course.tags%}
代码编译
运行效果
6.模块 既然有类似函数的宏,当然 Jinja 也支持导入某一模板的指定宏,方便编译网页。 示例如下: {% from 'macro.html' import course_item %} 引用 macro.html 里面的 course_item 宏并导入 {{ course_item(course) }} 调用 course_item 宏,参数为course
7.模板继承
模板的继承功能是通过 extend、block 来实现的,通过继承功能可以方便的共享模板组件的设置。
{% block 组件名 %} #定义组件的样式
{% extends 'xx.html' %} #告知模板继承的来源,后续如果用 block 定义同名组件,则会产生覆盖效果;如果没有同名,就会显示默认组件效果。
示例代码
运行效果
8.过滤器
过滤器通过 | 方式执行,例如
{{ var | abs }} #用 abs 过滤器对 var 求绝对值
示例代码和运行效果如下
9.url_for 写在 app.py 中的 url_for ,在 Jinja 中要前后加上两个大括号,才能被识别有效的 URL 地址。另外,Jinja 默认的 static 目录常用于存放图片、CSS、js等文件,因此使用 {{ url_for('static', filename='css/style.css/picture') }} 这种方式,可以获得指定文件的 URL 地址。
学习时间 213分钟
操作时间 156分钟
按键次数 10822次
实验次数 3次
报告字数 2240字
是否完成 完成