Flask模板补充
每日一言
There isn’t anyone who doesn’t feel regret or sadness. – Lavi
from D.Gray-man
模板继承
模板继承是Flask(使用Jinja2引擎)中一个强大的功能,允许你创建基础模板然后在子模板中扩展和重写特定部分。这种方式可以避免重复代码,保持一致的页面布局。
flask模板继承主要涉及两个部分:
- 基础模板:父模板,用于继承的基本的框架
- 子模板:派生于父模板,用于在父模板的基础上填充和覆盖
注意:子模版无法在父模板没有预留的地方进行添加和修改
使用示例
首先我们创建父模板文件 templates/base.html
1 |
|
然后我们创建一个子模版 templates/index.html
1 |
|
在Falsk应用中,要使用模板,需要先引入头文件:
1 |
|
然后在视图函数中,需要使用 render_template()
函数返回子模版,模板中的参数可以通过关键字参数传递:
1 |
|
在html中使用的参数一定要传参,否则会返回状态码500,表示服务器内部错误。
过滤器
过滤器用于对模板中传入变量的数据格式进行处理,可以让页面显式更加整齐,规范。
字符串操作过滤器
capitalize
将字符串首字母大写:
1 |
|
lower
将字符串转为小写:
1 |
|
upper
将字符串转为大写:
1 |
|
title
将字符串中每个单词首字母大写:
1 |
|
trim
去除字符串首尾的空白字符:
1 |
|
striptags
去除HTML标签:
1 |
|
replace(old, new[, count])
替换字符串:
1 |
|
数字操作过滤器
int
1
2{{ number|int }}
<!-- '5.5' 变成 5 -->float
1
2{{ number|float }}
<!-- '5' 变成 5.0 -->abs
1
2{{ number|abs }}
<!-- -5 变成 5 -->roud(precision=0,method='common')
1
2{{ 3.1415926|round(2) }}
<!-- 显示为 3.14 -->
列表操作过滤器
first
1
2{{ [1, 2, 3]|first }}
<!-- 显示 1 -->last
1
2{{ [1, 2, 3]|last }}
<!-- 显示 3 -->length/count
1
2{{ users|length }}
<!-- 如果users有3个元素,显示 3 -->join(delimiter)
1
2{{ ['Python', 'Flask', 'Jinja2']|join(', ') }}
<!-- 显示 'Python, Flask, Jinja2' -->sort
1
2{{ [3, 1, 2]|sort }}
<!-- 显示 [1, 2, 3] -->reverse
1
2{{ [1, 2, 3]|reverse }}
<!-- 显示 [3, 2, 1] -->
格式化过滤器
date(format="格式字符串")
1
2{{ some_date|date('%Y-%m-%d') }}
<!-- 如 '2025-03-02' -->default(value,default_value='默认值')
1
2{{ user_name|default('匿名') }}
<!-- 当user_name不存在或为空时,显示'匿名' -->
自定义过滤器
在Flask应用中,可以注册自定义过滤器:
在Flask应用中通过如下方式注册一个自定义的过滤器:
1 |
|
宏和模板包含
宏是可以重用的模板片段。模板运行允许在一个模板中插入另一个模板的内容。
创建宏
首先我们在文件 templates/macros.html
中定义一个宏如下:
1 |
|
这个模板可以将python中的一个列表转为html中的一个列表。
使用宏
然后我们在 templates/index.html
中使用该模板:
1 |
|
这样在渲染时,我们就能轻松使用宏将所有的python列表展示出来。减少了重复代码,让写html文件也如同函数调用一般。
模板上下文
视图函数中传递的变量可以在模板中直接使用:
视图函数:
1 |
|
模板:
1 |
|