在 Python中,如果需要对某个变量进行处理,我们可以通过函数来实现。在模板中,我们则是通过过滤器来实现的。过滤器本质上也是函数,但是在模板中使用的方式是通过管道符号(|)来调用的。例如有个字符串类型变量name,想要获取他的长度,则可以通过{{ name | length }}来获取,Jinja2会把 name当做第一个参数传给length过滤器底层对应的函数。length 是Jinja2内置好的过滤器,Jinja2中内置了许多好用过滤器,如果内置过滤器不满足需求,我们还可以自定义过滤器。我们先来学习下如何自定义过滤器,明白了过滤器的原理后,再去学习Jinja2内置过滤器就更能得心应手了。
一、用管道符号表示过滤器( | )
以length过滤器为例:
username="知网"
{{ user.username | length }}返回:2
length过滤器是jinja2模板中常用内置过滤器之一,length表示返回变量的长度。
二、自定义过滤器
如果jinja2模板中的过滤器无法满足我们的使用需求,我们也可以自定义过滤器。
示例:
注册一个时间格式化的过滤器。
python中代码块:
from flask import Flask,render_template
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("/filter")
def filter_demo():
mytime = datetime.now()
return render_template("filter.html",mytime=mytime)
html中代码块:
<div>{{ mytime | dformat }}</div>
三、创建文件:05过滤器
复制文件:04模板访问对象属性到flask项目下重命名为:05过滤器,并开启debug模式。
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)
app.add_template_filter(datetime_format,"dformat")
class User:
def __init__(self,username,email):
self.username = username
self.email = email
@app.route('/')
def hello_world():
user = User(username="知网",email="xxx@qq.com")
person = {
"username" : "张三",
"email":"zhangsan@qq.com"
}
return render_template('index.html',user=user,person=person)
@app.route("/blog/<blog_id>")
def blog_detail(blog_id):
return render_template("blog_detail.html",blog_id=blog_id,username="Mr.Qian")
@app.route("/filter")
def filter_demo():
user = User(username="知网",email="xxx@qq.com")
mytime = datetime.now()
return render_template("filter.html",user=user,mytime=mytime)
if __name__ == '__main__':
app.run()
四、创建文件:filter.html
在templates目录下创建一个新的html5文件:filter.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>过滤器的使用</title>
</head>
<body>
{{ user.username }}-{{ user.username|length }}
<div>{{ mytime | dformat }}</div>
</body>
</html>