【Flask】Jinja2模板之过滤器

导读:本篇文章讲解 【Flask】Jinja2模板之过滤器,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、过滤器定义

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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!