一、过滤器定义
实质上就是一个转换函数。变量可以通过“过滤器”进行修改,过滤器可以理解为是jinja2里面的内置函数和字符串处理函数。
常用的过滤器有:
1、字符串过滤器
视图函数
from flask import Flask, render_template
# todo 初始化Flask项目的服务
app = Flask(__name__)
student = {'name': 'kobe', 'age': 14, 'gender': '男'}
@app.route('/str')
def test1():
return render_template('04-字符串的过滤器.html',**student) #为了方便在模板中使用,可以把字典打伞
if __name__ == '__main__':
# 0.0.0.0:代表当前的系统的所有的ip地址,
# 设置端口为8080,
# flask的debug模式:把错误的信息显示到页面中
app.run(host='0.0.0.0', port=8080, debug=True)
模板文件
变量数据没有传入数据的时候,可以给变量设置默认值
例如:格式为 <p>{{ name | default('自律') }}</p>
当后端传入的值没有name的时候,默认展示为自律
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>字符串的过滤器</title>
</head>
<body>
{# 当变量数据没有传入数据的时候,可以给变量设置默认值 #}
<p>{{ name | default('自律') }}</p>
<P>{{ name1 | default('自爱') }}</P>
{# 单词首字母大写 #}
<p>{{ 'hello world' | capitalize }}</p>
{# 单词全小写 #}
<p>{{ 'XML' | lower }}</p>
{# 去除字符串前后的空白字符 #}
<p>{{ ' hello ' | trim }}</p>
{# 字符串反转,返回"olleh" #}
<p>{{ 'hello' | reverse }}</p>
{# 格式化输出,返回"Number is 99" #}
<p>{{ '%s is %d' | format("Number", 99) }}</p>
{# 关闭HTML自动转义 #}
<p>{{ '<em>name</em>' | safe }}</p>
{% autoescape false %}{# HTML转义,即使autoescape关了也转义,可以缩写为e #}
<p>{{ '<em>name</em>' | escape }}</p>
{% endautoescape %}
</body>
</html>
2、数字过滤器
视图
from flask import Flask, render_template
# todo 初始化Flask项目的服务
app = Flask(__name__)
student = {'name': 'kobe', 'age': 14, 'gender': '男'}
@app.route('/number')
def test2():
return render_template('05-数字的过滤器.html')
if __name__ == '__main__':
# 0.0.0.0:代表当前的系统的所有的ip地址,
# 设置端口为8080,
# flask的debug模式:把错误的信息显示到页面中
app.run(host='0.0.0.0', port=8080, debug=True)
模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>字符串的过滤器</title>
</head>
<body>
{# 四舍五入的转换,默认取整数部分 #}
<P>{{ 6.6688 | round }}</P>
{# 小数点后面截取几位 #}
<P>{{ 6.6688 | round(2) }}</P>
{# 取绝对值 #}
<P>{{ -88 | abs }}</P>
</body>
</html>
3、列表相关的过滤器
视图函数
from flask import Flask, render_template
# todo 初始化Flask项目的服务
app = Flask(__name__)
@app.route('/list')
def test3():
return render_template('06-列表的过滤器.html')
if __name__ == '__main__':
# 0.0.0.0:代表当前的系统的所有的ip地址,
# 设置端口为8080,
# flask的debug模式:把错误的信息显示到页面中
app.run(host='0.0.0.0', port=8080, debug=True)
模板文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>列表的过滤器</title>
</head>
<body>
{# 定义一个numbers变量 #}
{% set numbers =[6,8,23,35,7,11] %}
# 取第一个元素 #}
<p>{{ [1,2,3] | first }}</p>
{# 取最后一个元素 #}
<p>{{ [1,2,3] | last }}</p>
{# 返回列表长度,可以写为count #}
<p>{{ [1,2,3,4,5] | length }}</p>
{# 列表求和 #}
<p>{{ [1,2,3,4,5] | sum }}</p>
{# 列表排序,默认为升序 #}
<p>{{ [3,2,1,5,4] | sort }}</p>
{# 合并为字符串,返回"1 | 2 | 3 | 4 | 5" #}
<p>{{ [1,2,3,4,5] | join(' | ') }}</p>
{# 列表中所有元素都全大写。这里可以用upper,lower,但capitalize无效 #}
<p>{{ ['alex','bob','ada'] | upper }}</p>
</body>
</html>
4、字典相关的过滤器
视图
from flask import Flask, render_template
# todo 初始化Flask项目的服务
app = Flask(__name__)
@app.route('/dict')
def test4():
return render_template('07-字典的过滤器.html')
if __name__ == '__main__':
# 0.0.0.0:代表当前的系统的所有的ip地址,
# 设置端口为8080,
# flask的debug模式:把错误的信息显示到页面中
app.run(host='0.0.0.0', port=8080, debug=True)
模板文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>列表的过滤器</title>
</head>
<body>
{# 定义一个numbers变量 #}
{% set students =[
{'name':'kb','age':18,'gender':'男'},
{'name':'kd','age':21,'gender':'男'},
{'name':'love','age':24,'gender':'女'},
] %}
{# 根据学生的年领排序 #}
<ul>
{% for stu in students | sort(attribute='age',reverse=false) %}
<li>{{ stu.name }},{{ stu.age }}</li>
{% endfor %}
</ul>
{# 上面的数据分组,每组编程一个子列表 #}
<ul>
{% for group in students | groupby('gender') %}
<li>{{ group.grouper }}</li>
{% for stu in group.list %}
<li>{{ stu.name }},{{ stu.gender }}</li>
{% endfor %}
{% endfor %}
</ul>
{# 取出字典种的某一类,组成大的列表,然后再把列表变成字符串 #}
<P>{{ students | map(attribute='name') | join('-') }}</P>
</body>
</html>
5、自定义过滤器
视图函数
from flask import Flask, render_template
# todo 初始化Flask项目的服务
app = Flask(__name__)
def get_top3(li): #取列表的前3个元素
return li[:3]
#第一种方式,注册一个过滤器
app.jinja_env.filters['get_top']=get_top3
#第二种方式
@app.template_filter('get_qu')
def get_qu(li): #计算列表种每个元素的平方
return list(map(lambda x:x*x,li))
@app.route('/my_filter')
def test5():
return render_template('08-自定义的过滤器.html')
if __name__ == '__main__':
# 0.0.0.0:代表当前的系统的所有的ip地址,
# 设置端口为8080,
# flask的debug模式:把错误的信息显示到页面中
app.run(host='0.0.0.0', port=8080, debug=True)
模板文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>自定义的过滤器</title>
</head>
<body>
<P>{{ [1,2,4,7,3] | get_top }}</P>
<P>{{ [1,2,3,4,5,6] | get_qu }}</P>
</body>
</html>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123417.html