我尝试为任何对象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天。
所以我尝试在now
和picture.date
之间找到一个操作,像截断datetime.timedelta
这样的东西可能更大吗?我不想全面了解if
条件。
答案 0 :(得分:3)
您可以使用naturaltime
模板过滤器。
首先,您需要将'django.contrib.humanize'
添加到INSTALLED_APPS
设置,然后在模板中执行以下操作:
{% load humanize %}
{{ a.pictures.last.date|naturaltime }}
如果这不符合您的要求,那么您可以编写自己的custom template filter。这将使逻辑脱离模板。
还有一个timesince
过滤器。然而'分钟'是它处理的最小单位,所以如果你想要显示“5秒前”它是没用的。