【Flask】Jinja2模板之过滤器

一、过滤器定义

实质上就是一个转换函数。变量可以通过“过滤器”进行修改,过滤器可以理解为是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>
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码敲到头发茂密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值