一、过滤器定义

实质上就是一个转换函数。变量可以通过“过滤器”进行修改,过滤器可以理解为是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>

【Flask】Jinja2模板之过滤器相关推荐

  1. Flask Jinja2 模板中的变量和过滤器

    Flask Jinja2 模板中的变量和过滤器 Flask 可以在视图函数中返回模板文件,模板引擎默认使用的是 Jinja2 . 通常,返回的 Jinja2 模板文件并不是一个静态的页面,而是同时有静 ...

  2. Flask后端笔记(三)Jinja2模板、过滤器、表单、宏、模板继承、包含

    Flask后端笔记 Jinja2模板 基本流程 变量 过滤器 字符串过滤器 支持链式使用过滤器 列表过滤器 自定义过滤器 表单 不使用Flask-WTF扩展时,表单需要自己处理 使用Flask-WTF ...

  3. Flask Jinja2模板

    Jinja 模板 模板语言(templationg language)中会把变量传递给模板.在Jinja中变量名是由变量代码块(variable block){{}}来表示的,另外还有控制代码块(co ...

  4. Flask Jinja2模板引擎

    模板 在前面的示例中,视图函数的主要作用是生成请求的响应,这是最简单的请求.实际上,视图函数有两个作用:处理业务逻辑和返回响应内容.在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护 ...

  5. jinja2模板注入_Flask jinja2 模板注入思路总结

    Flask jinja2 模板注入思路总结 前言 虽然这个漏洞已经出现很久了, 不过偶尔还是能够看到翻了翻 freebuf 上好像只有 python2 的一些 payload, 方法也不是很全我找来找 ...

  6. 第十阶段 -- Flask框架03:【Jinja2模板01:模板;过滤器;控制语句if for】

    文章目录 1. Jinja2模板介绍和查找路径 2. 模板传参及其技巧 3. 模板中使用url_for 4. Jinja2过滤器 1. 基本使用 2. 过滤器介绍 3. default详解 4. 常用 ...

  7. Flask mysql 模版传参_Flask渲染Jinja2模板和传参

    ### Flask渲染Jinja2模板和传参: 1. 如何渲染模板: * 模板放在`templates`文件夹下 * 从`flask`中导入`render_template`函数. * 在视图函数中, ...

  8. flask(四)jinja2模板

    from flask import Flask,render_template @app.route("/index/") def  index(): return render_ ...

  9. Flask框架基础Jinja2模板

    Flask框架基础Jinja2模板-- 潘登同学的flask学习笔记 文章目录 Flask框架基础Jinja2模板-- 潘登同学的flask学习笔记 return 模板 Template 模板的使用 ...

最新文章

  1. Sqlserver 2012 导入 DBF文件
  2. rust相框加载图片代码_Rust 能取代 Python,更好的实现神经网络?
  3. 相机视场角和焦距_按照工业镜头的视场的分类
  4. flask 模板 php,Flask四之模板
  5. 网络——Base64Encode(转:自定义Base64编码器——Base64Encode)
  6. fiddler怎么修改服务器返回数据,基于Fiddler实现修改接口返回数据进行测试
  7. 清华镜像站 python_使用清华、豆瓣镜像源下载tensorflow
  8. 计算几何常用算法及numpy仿真
  9. seqkit根据基因id_基因家族成员的鉴定/基因在染色体上的位置
  10. GCD nyoj1007(欧拉函数运用数论入门)
  11. Linux从入门到指令详解
  12. 最值得收藏的 pycharm(Python) 常用快捷键使用, 并和不同软件中相同快捷键作比较, 让你的效率成倍增加
  13. EXCEL,复制内容随时会卡死,经常发生
  14. Discuz论坛超漂亮手机模板
  15. Java项目:jsp+servlet网上会议室预约系统
  16. 关于开灯问题的两种解法
  17. canvas绘图有锯齿毛边问题的解决
  18. 台式计算机一般多大功率,电脑的功率有多大,台式电脑的功率是多少
  19. Android 12源码单手模式
  20. 配置网络接口的“IP“命令

热门文章

  1. 0xde c语言合法常量_【期初优课堂】2020“云课堂”开讲啦!第3期(C语言)
  2. python怎么封装方法然后调用_我现在想把自己写的python模块源代码封装成dll,然后在别的python脚本里调用,可以吗?...
  3. python怎么输入列表元素每个元素占一行_如何对列表的每个元素执行操作并将结果放在Python的新列表中?...
  4. 全球云数据中心发展预测白皮书2016~2021
  5. mysql int zerofill_Mysql 中int[M]—zerofill-阿里云开发者社区
  6. easypoi教程_SpringBoot图文教程17—上手就会 RestTemplate 使用指南
  7. 成功解决 将xgboost的plot_importance绘图时出现的f0、f1、f2、f3、f4、f5等改为对应特征的字段名
  8. 成功解决Visual Studio 2015安装时,点击vs_community.exe 没有反应
  9. Py之gensim:gensim的简介、安装、使用方法之详细攻略
  10. Python3.x 发送邮件