当我执行这个操作时:
{% load humanize %}
{{ video.pub_date|naturaltime|capfirst }}
我得到了2天,19小时前
如何只获取2天而不是小时。如果视频发布时间少于一天,则应显示X小时前,然后应计算为X天前,然后是几周前。我只需要第一部分。 我查看了humanize文档,但找不到我需要的内容。
Django内置了一个模板过滤器timesince,提供了与您上面提到的相同的输出。以下过滤器仅删除逗号后的第二部分:
from datetime import datetime, timedelta
from django import template
from django.utils.timesince import timesince
register = template.Library()
@register.filter
def age(value):
now = datetime.now()
try:
difference = now - value
except:
return value
if difference <= timedelta(minutes=1):
return 'just now'
return '%(time)s ago' % {'time': timesince(value).split(', ')[0]}
现代 Django 中有一个 naturaltime
。
假设当前时间是 2007年2月17日 16:30:00
。
它将 2007年2月16日 13:31:29
转换为 1天2小时前
。
{# some_template.html #}
{% load humanize %}
{{ past_time | naturaltime }}
https://docs.djangoproject.com/en/2.2/ref/contrib/humanize/#naturaltime
overdue = ExpressionWrapper(timezone.now() - F('due_date'), output_field=fields.DurationField())
objects = Activity.objects.all().order_by('-due_date').annotate(overdue=overdue)
naturaltime
很不错。像humanize
一样,它将16 Feb 2007 13:31:29
计算为1 天,2 小时前
。 - Harry Moreno