关于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>
代码实现效果
网络异常,图片无法展示
|
智能时间过滤器效果.png
github:https://github.com/KingUranus/FlaskTests