具有最大单位{Dj}的Django deltatime

时间:2017-03-10 11:14:14

标签: django django-templates python-datetime python-3.6

我尝试为任何对象Album创建渲染,我最后添加了picture,我想与now进行比较(图片的日期是在picture.date)。

但在我的渲染中我是最大的时间单位

模型:

from django.utils.timezone import now

class Album(models.Model):
     name = models.CharField( max_length=50)
     ...

class Pictures(models.Model):
     album = models.ForeignKey(Album,
                         on_delete=models.CASCADE,
                         related_name='albums')
    date = models.DateTimeField( default=now)
    ...

模板中我创建了专辑的时间轴,我使用循环:

{% for a in album %}
    related album : {{ a.name }}
    last modif was {{ a.pictures.last.date }} ago.
{% endfor %}

例如,渲染将类似于:

5s
1min
2h
3days

因此,如果我datetime.timedelta(0, 5, 279122)只返回 5 s ,或者如果我datetime.timedelta( 01 , 25, 279122)只返回 1天

所以我尝试在nowpicture.date之间找到一个操作,像截断datetime.timedelta这样的东西可能更大吗?我不想全面了解if条件。

1 个答案:

答案 0 :(得分:3)

您可以使用naturaltime模板过滤器。

首先,您需要将'django.contrib.humanize'添加到INSTALLED_APPS设置,然后在模板中执行以下操作:

{% load humanize %}
{{ a.pictures.last.date|naturaltime }}

如果这不符合您的要求,那么您可以编写自己的custom template filter。这将使逻辑脱离模板。

还有一个timesince过滤器。然而'分钟'是它处理的最小单位,所以如果你想要显示“5秒前”它是没用的。