【问题标题】:Django template tag to convert epoch time to human readable time将纪元时间转换为人类可读时间的 Django 模板标签
【发布时间】:2016-10-14 19:57:08
【问题描述】:
是否有一个轻量级的 Django 模板标签可以将纪元时间转换为“人类可读”时间(与 Humanize 的 naturaltime 相同)?
我尝试了一个返回 datetime.fromtimestamp(value) 的自定义模板标签 - 但这将时间戳显示为 Month Date Year Time am/pm。我尝试了另一个返回'%(time)s ago' % {'time': timesince(value).split(', ')[0]}(使用timesince)的方法,但timesince 似乎不允许将纪元时间作为参数。
【问题讨论】:
标签:
django
django-templates
【解决方案1】:
听起来像是在使用模板之前应该做的事情。只需将时间戳转换为日期时间对象,然后再将其传入并按您的意愿使用即可。
但如果你坚持:
from datetime import datetime
from django import template
register = template.Library()
@register.filter("parsetimestamp")
def timestamp(value):
try:
return datetime.fromtimestamp(value)
except AttributeError, e:
catch errors..
然后在您的模板中使用链接:
{{ your_time_stamp | parsetimestamp | timeuntil }}
未经测试,但你应该明白。
【解决方案2】:
我最终选择了一些不同的东西 - 在我的模板中避免链接等:
from django.template.defaulttags import register
import time
@register.filter(name='human_time')
def human_time(value):
try:
diff = time.time() - float(value)
except:
return ''
m, s = divmod(diff, 60)
h, m = divmod(m, 60)
if h:
return "%s hours ago" % int(h)
elif m:
return "%s minutes ago" % int(m)
elif s:
return "%s seconds ago" % int(s)
这可以自然地扩展以迎合days、weeks、months 甚至years。