Django模板标记将纪元时间转换为人类可读时间

时间:2016-10-14 19:57:08

标签: django django-templates

是否有一个轻量级的Django模板标签,可以将纪元时间转换为“人类可读”的标签。时间(与Humanize中的naturaltime相同)?

我已经尝试了一个返回datetime.fromtimestamp(value)的自定义模板标记 - 但是这会将时间戳显示为月份日期年度时间上午/下午。我尝试了另一个返回'%(time)s ago' % {'time': timesince(value).split(', ')[0]}的问题(使用timesince),但是时间似乎并不允许将纪元时间作为参数。

2 个答案:

答案 0 :(得分:0)

在你到达模板之前听起来像你应该做的事情。只需将时间戳转换为datetime对象,然后再将其传入,并按原样使用它。

但如果你坚持:

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 }}

未经测试,但您应该明白这一点。

答案 1 :(得分:0)

我最终选择了不同的东西 - 避免链接等我的模板:

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)

这可以自然地扩展到适合daysweeksmonths甚至years