一、前置问题
1、什么是过滤器?
在Jinja2模板引擎中,过滤器是一种特殊的功能,用于修改变量的输出,从而转换或处理模板中的数据显示。
2、过滤器能干什么?
变量可以通过 过滤器 修改。过滤器与变量用管道符号( | )分割,并且也 可以用圆括号传递可选参数。多个过滤器可以链式调用,前一个过滤器的输出会被作为后一个过滤器的输入。
二、实际运用(计算字符串的长度)
例如 {{ user.username|length }}用于获取用户用户名的长度。。过滤器接受带圆括号的参数,如同函数调用。例{{ list|join(', ') }} 这个例子会把一个列表用逗号连接起来 。
1、app.py
from flask import Flask, render_template
app = Flask(__name__)
class User:
def __init__(self, username, email):
self.username = username
self.email = email
@app.route("/filter")
def filter_demo():
user = User(username="小陈", email="xiaochen@qq.com")
return render_template("filter.html", user=user)
2、filter.html
<div>{{ user.username }}-{{ user.username|length }}</div>
3、运行结果
三、自定义过滤器
1、app.py
from flask import Flask, render_template
from datetime import datetime
app = Flask(__name__)
# 自定义过滤器
def datetime_format(value, format="%Y年%m月%d日 %H:%M"):
return value.strftime(format)
# 首先,定义一个名为datetime_format的函数,该函数接受一个datetime对象作为参数,并返回一个格式化的字符串。
# 然后,在Flask应用中使用app.add_template_filter()方法将datetime_format函数注册为名为"dformat"的模板过滤器。
app.add_template_filter(datetime_format, "dformat")
class User:
def __init__(self, username, email):
self.username = username
self.email = email
@app.route("/filter")
def filter_demo():
user = User(username="小陈", email="xiaochen@qq.com")
now_time = datetime.now()
return render_template("filter.html", user=user, now_time=now_time)
2、filter.html
<div>{{ now_time|dformat }}</div>
3、运行结果
四、jinja2内置过滤器清单
了解更多过滤器功能,访问下方地址👇
jinja2中文官方文档网址:模板设计者文档 — Jinja2 2.7 documentation