问题:如何在 Django 模板中使用 Humanize 显示“x 天前”类型时间?

当我这样做时:

{% load humanize %}

{{ video.pub_date|naturaltime|capfirst }}

我得到2 days, 19 hours ago

如果没有时间,我怎么能得到 2 天。基本上,如果视频是在不到一天前发布的,那么它应该说 X 小时前,那么它应该像 X 天前一样以天计算,然后以几周为单位。我只是不想要 1 小时 5 分钟前或 2 天 13 分钟前。只是第一部分。

我查看了人性化文档,但找不到我需要的东西。

解答

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]}
Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐