具有最大单位的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 天.
所以我尝试在 now
和 picture.date
之间找到一个操作,比如截断的 datetime.timedelta
因为更大的单位是可能的吗?我不想要一整套 if
条件。
您可以使用 naturaltime
模板过滤器。
首先,您需要将 'django.contrib.humanize'
添加到您的 INSTALLED_APPS
设置中,然后在您的模板中,您可以:
{% load humanize %}
{{ a.pictures.last.date|naturaltime }}
如果这不能满足您的要求,那么您可以编写自己的 custom template filter。这将使逻辑脱离模板。
还有一个 timesince
过滤器。但是'minutes'是它处理的最小单位,所以如果你想显示“5秒前”就没用了。
我正在尝试为任何对象创建渲染 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 天.
所以我尝试在 now
和 picture.date
之间找到一个操作,比如截断的 datetime.timedelta
因为更大的单位是可能的吗?我不想要一整套 if
条件。
您可以使用 naturaltime
模板过滤器。
首先,您需要将 'django.contrib.humanize'
添加到您的 INSTALLED_APPS
设置中,然后在您的模板中,您可以:
{% load humanize %}
{{ a.pictures.last.date|naturaltime }}
如果这不能满足您的要求,那么您可以编写自己的 custom template filter。这将使逻辑脱离模板。
还有一个 timesince
过滤器。但是'minutes'是它处理的最小单位,所以如果你想显示“5秒前”就没用了。