详解flask入门模板引擎
模板引擎
说明:模板文件就是按照一定的规则书写的展示效果的HTML文件模板引擎就是负责按照指定规则进行替换的工具
模板引擎选择jinja2
一、渲染模板的方法
1、将渲染的模板进行返回
render_template()
2、渲染字符串返回
render_templates_string()
实例
@app.route('/') defindex(): #将模板内容响应给用户 returnrender_template('index.html') #渲染一内容响应给用户 returnrender_template_string('原谅色')
二、模板的语法
模板中只存在俩种语法
1、变量
{{var}}
#像模板文件中传参 returnrender_template('index.html',title='首恶') {{title}}
2、标签
{%标签名%}
注意:
在模板中使用字典中的键需要像使用对象得方式来调用
{{data.key}}
如果在模板中给定的变量不存在则插入的是空字符串不会报错
三、过滤器
过滤器使用管道符|来使用的
1、{{var|abs}}返回一个数值的绝对值
2、default设置默认值
只有当给定的变量不存在时则执行默认值
当设置default的boolean的时候会执行默认值
3、first:取出变量中的第一个字符
4、last:取出变量中的最后一个字符
5、format:字符的格式化
6、length:返回变量值的长度
7、join:拼接成字符串
8、safe:不转义标签原样显示
9、lower转为小写
10、upper转为大写
11、replace替换
12、striptages去除HTML标签
{{data.html|striptags}}
四、标签
语法格式:{%标签名%}
(1)if
实例
{%ifdata.bool%}
(2)for循环
实例
{%foriindata.xxxx%} {#错误的迭代方法TypeError:'bool'objectisnotiterable#} {#{%foriindata.bool%}#}
注意:
breakcontinue不能够在这里使用
迭代字典
{%fork,vindata.items()%}
获取当前迭代的状态
变量 | 描述 |
---|---|
loop.index | 获取当前迭代的索引从1开始 |
loop.index0 | 获取当前迭代的索引从0开始 |
loop.first | 是否为第一次迭代 |
loop.last | 是否为最后一次迭代 |
loop.length | 迭代的长度 |
六、注释
{#多行注释#}
七、文件包含include
相当于把一个文件拷贝到当前的你的包含的位置
实例
{%include'common/header.html'%}我是中间的内容{%include'common/footer.html'%}
注意:
1、包含的公共的文件中只存放公共的代码除此以外什么都不要存在
2、导入的时候如果文件和在同一级别直接导入就可以如果包含在某个目录中需要写出路径
{%include'common/header.html'%} {%include'test.html'%}
八、宏macro
概念:类似python中的函数
实例
在macro.html中
{%macroinput(name,type='text',value='')%}{%endmacro%}
宏的调用
{{input('text','username','')}} {{input()}} {{input(type='password',name='userpass')}}
宏的导入
(1)import
{%import'test.html'astest%} {%import'common/test.html'astest%}用户名:{{test.input(type='password',name='userpass')}}
(2)formimport
{%from'test.html'importinput%} {%from'common/test.html'importinput%}用户名:{{input(type='password',name='userpass')}}
注意:
- 宏的调用只能在定义的下方去调用否则未定义
- 宏如果存在形参且没有默认值则可以调用(没意义)
- 形参的默认值需要遵循默认值规则有默认值的参数放右侧
- 可以正常使用关键字参数
九、继承extends
语法:
- {%extends%}继承某个模板
- {%block%}挖坑和填坑
- {{super()}}调用被替换掉的代码
base.html
{%blockheader%} {%blockmeta%} {%endblock%} {%blocktitle%}首页{%endblock%} {%blocklink%} {%endblock%} {%blockscript%} {%endblock%} {%endblock%}头部 {%blockcon%} 我是中间的内容部分 {%endblock%}