flask自定义模板过滤器
@app.template_filter(‘过滤器名字’)
flask 中用@app.template_filter(‘name’)来自定义名字为name的过滤器,name可以不指定,当不指定的时候使用函数的名称。
然后在该视图函数下定义函数来指定该过滤器的功能即可
如下面的案例为返回博文发表时间(如在朋友圈,微博等)形如’ xxx小时之前 ’
在py文件中自定义过滤器
我定义的过滤器名称为handle_time;功能是根据发布时间和当前时间的时间差来返回博文发布时间。(一分钟以内返回 ‘刚刚’,一小时以内返回‘xx分钟之前’,一天以内返回‘xx小时之前’)
from flask import Flask,render_template
from datetime import datetime
app = Flask(__name__)
@app.route('/')
def HomePage():
return 'Welcome to my homepage!'
context={
'username': 'Sleet',
'password': '123456',
'now_time': datetime(2020,10,19,14,20,50)
}
@app.route('/self-filter.html')
def self_filter():
return render_template('HTML文件/self-filter.html',**context)
@app.template_filter('handle_time')
def handle_time(time):
'''
一分钟以内--> 刚刚
一分钟~一小时--> xx分钟之前
一小时~一天--> xx小时前
:param time: 当前时间
:return: 文本
'''
now = datetime.now()
time_stamp = (now-time).total_seconds()
if time_stamp < 60:
return '刚刚'
elif 60 <= time_stamp <= 60*60:
return '%d分钟前'%(time_stamp//60)
elif 60*60 <= time_stamp <= 60*60*24:
return '%d小时前'%(time_stamp//60**2)
if __name__ == '__main__':
app.run(debug=True)
在html文件中使用该自定义的过滤器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>自定义模板过滤器</title>
</head>
<body>
<p>博客发布时间:{{ now_time|handle_time }}</p> # handle_time为自定义过滤器名称
</body>
</html>