四、Jinja2-过滤器和测试器

89 阅读2分钟

在Python中,如果需求对某个变量进行处理,使用函数在实现,在模版中,我们是通过过滤器本质上也是函数,但在模版的使用方式是通过管道符(|)来调用的,例如有个字符串变量name,想要获取他的长度,则可以通过{{name|length}}来获取,Jinja2会把name当做第一个参数传给length过滤器底层对应的函数,length是Jinja2内置好的过滤器,如果内置过滤器不满足需求,我们还可以自定义过滤器

一、内置过滤器-length、abs()

如下是过滤用户名长度的代码,Jinja2的内置过滤器有很多,使用的时候可查阅官网

@app.route("/filter")
def filter():
    userd = user(name="admin",email="xxx@qq.com")
    dates = -8
    return render_template('filter.html',userd=userd,dates=dates)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Jinja2过滤器使用</title>
</head>
<body>
用户名:{{userd.name}},
带用户名长度:{{userd.name | length}}
求数组的绝对值:{{dates | abs()}}
</body>
</html>
二、自定义过滤器——时间格式化

value为想要改变格式的内容,format为想要格式化的内容,使用strftime()函数进行转换,使用add_template_filter()添加自定义过滤器,dformat为过滤器的名字

from datetime import datetime

def datetime_format(value,format="%Y-%m-%d %H:%M"):
    return value.strftime(format)
app.add_template_filter(datetime_format,"dformat")

@app.route('/set_filter')
def set_filter():
    mytime = datetime.now()
    return render_template("set_filter.html",mytime=mytime)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自定义过滤器</title>
</head>
<body>
<h1>
    时间:{{mytime | dformat}}
</h1>
</body>
</html>
三、测试器

测试器用来测试某些元素是否满足某个条件,如测试一个变量是否是字符串、测试一个变量能否被调用,以下代码演示defined测试器

@app.route("/testqi")
def testqi():
    username = "admin"
    return render_template("testqi.html",user = username)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试器</title>
</head>
<body>
{% if user is defined %}
  user 定义了:{{user}}
{% else %}
  user 没有定义
{% endif %}
</body>
</html>

Jinja2的内置测试器还有很多,使用时可查阅官方文档进行查阅