关于Flask过滤器
Flask自带的过滤器功能有限,很多时候没办法满足用户需求。
故,Flask为用户提供了template_filter
装饰器,用来创建用户所需的自定义过滤器
时间显示
经常刷博客的朋友都会注意,博客发布时间的显示大致规则如下:
时间段 | 显示格式 |
---|---|
1分钟内 | 刚刚 |
1--60分钟 | 多少分钟前 |
1-24小时 | 多少小时前 |
1--30天内 | 多少天前 |
30天以上 | 具体时间 |
非时间数据 | 原有内容(代码自适应的异常场景) |
时间过滤器
# -*- coding: utf-8 -*-
# @Author : 王翔
# @JianShu : 清风Python
# @Date : 2019/5/23 23:56
# @Software : PyCharm
# @version :Python 3.6.8
# @File : app.py
from flask import Flask, render_template
import datetime
app = Flask(__name__)
_now = datetime.datetime.now()
@app.template_filter("time_filter")
def time_filter(time):
if not isinstance(time, datetime.datetime):
return time
_period = (_now - time).total_seconds()
if _period < 60:
return "刚刚"
elif 60 <= _period < 3600:
return "%s分钟前" % int(_period / 60)
elif 3600 <= _period < 86400:
return "%s小时前" % int(_period / 3600)
elif 86400 <= _period < 2592000:
return "%s天前" % int(_period / 86400)
else:
return time.strftime('%Y-%m-%d %H:%M')
@app.route('/')
def index():
timeList = [
'abcd',
_now,
_now - datetime.timedelta(minutes=5),
_now - datetime.timedelta(hours=10),
_now - datetime.timedelta(days=15),
_now - datetime.timedelta(days=150)
]
return render_template('index.html', timeList=timeList)
if __name__ == '__main__':
app.run()
对应的HTML基础模板:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>智能显示时间</title>
{% for time in timeList %}
<ul>
<li>
<p>{{time}}</p>
<p>{{time|time_filter}}</p>
</li>
</ul>
{% endfor %}
</head>
<body>
</body>
</html>
代码实现效果
智能时间过滤器效果.pnggithub:https://github.com/KingUranus/FlaskTests
©本文由简书作者:清风Python 原创 如需转载请注明
欢迎大家关注我的公众号 清风Python
网友评论