具有最大单位的Django deltatime

Django deltatime with the largest unit

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

但是在我的render i时最大单位时间.

型号:

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) 只是 return 5 s,或者如果我 datetime.timedelta( 01 , 25, 279122) 只是 return 1 天.

所以我尝试在 nowpicture.date 之间找到一个操作,比如截断的 datetime.timedelta 因为更大的单位是可能的吗?我不想要一整套 if 条件。

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

首先,您需要将 'django.contrib.humanize' 添加到您的 INSTALLED_APPS 设置中,然后在您的模板中,您可以:

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

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

还有一个 timesince 过滤器。但是'minutes'是它处理的最小单位,所以如果你想显示“5秒前”就没用了。