在前端显示为该问题 "几分钟前发表或几天前发表"
后端通过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
来实现几分钟前发表的功能了