在前端显示为该问题 "几分钟前发表或几天前发表"
后端通过filter注册
设计需求
- 如果问题发表超过 10天 ,则显示为 /%Y-%m-%d %H:%M/
- 如果小于 10天 ,但是大于 1天 ,则显示为 /n天前/ 发表
- 如果小于 1天 ,但是大于 1小时 ,则显示为 /n小时前/ 发表
- 如果小于 1小时 ,但是大于 90秒 ,则显示为 /n分钟前/ 发表
- 如果小于 90秒 ,则显示为 /刚刚/ 发表
具体实现
通过 diff.days
和 diff.seconds
实现
比如,大于10天
if diff.days > 10: return dt.strftime('%Y-%m-%d %H:%M')
大于90秒,小于1小时
if diff.seconds <= 3600 and diff.seconds > 90: periods = ((diff.seconds / 60, "minute", "minutes"), )
具体代码
def timesince(dt, default="just now"): now = datetime.now() diff = now - dt if diff.days > 10: return dt.strftime('%Y-%m-%d %H:%M') if diff.days <= 10 and diff.days > 0: periods = ((diff.days, "day", "days"), ) if diff.days <= 0 and diff.seconds > 3600: periods = ((diff.seconds / 3600, "hour", "hours"), ) if diff.seconds <= 3600 and diff.seconds > 90: periods = ((diff.seconds / 60, "minute", "minutes"), ) if diff.seconds <= 90: return default for period, singular, plural in periods: if period: return "%d %s ago" % (period, singular if period == 1 else plural) return default
ok,之后就可以
app.jinja_env.filters['timesince'] = timesince
来实现几分钟前发表的功能了