Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何显示";“x天前”;在Django模板中使用人性化输入时间?_Python_Django_Humanize - Fatal编程技术网

Python 如何显示";“x天前”;在Django模板中使用人性化输入时间?

Python 如何显示";“x天前”;在Django模板中使用人性化输入时间?,python,django,humanize,Python,Django,Humanize,当我这样做时: {% load humanize %} {{ video.pub_date|naturaltime|capfirst }} 我在两天19小时前收到了 我怎么能只有两天没有时间。基本上,如果视频是在不到一天前发布的,那么它应该是X小时前,然后它应该像X天前一样以天计算,然后以周计算。我只是不想1小时5分钟前或2天13分钟前。只是第一部分 我查看了人性化文档,但找不到我需要的内容。您应该将您的文件复制到myapp.templatetags.myhumanize,并根据需要进行修改

当我这样做时:

{% load humanize %}

{{ video.pub_date|naturaltime|capfirst }}
我在两天19小时前收到了

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

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

您应该将您的文件复制到myapp.templatetags.myhumanize,并根据需要进行修改。(我找不到返回“x天,y小时前”的实际行。您使用的是哪个版本的django/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]}
从datetime导入datetime,timedelta
从django导入模板
从django.utils.timesince导入timesince
register=template.Library()
@寄存器过滤器
def年龄(值):
now=datetime.now()
尝试:
差异=现在-值
除:
返回值

如果差异您现在还可以使用ExpressionWrapper或Case/When,这将利用queryset和数据库直接格式化它

示例输出,以天/天的复数形式组合在我的头顶上:

overdue = ExpressionWrapper(timezone.now() - F('due_date'), output_field=fields.DurationField())
objects = Activity.objects.all().order_by('-due_date').annotate(overdue=overdue)

现代django中有
naturaltime

现在给定的
2007年2月17日16:30:00

它将2007年2月16日13:31:29更改为2小时前的1天

{# some_template.html #}
{% load humanize %}
{{ past_time | naturaltime }}

我建议不要复制和修改代码。这可能会破坏新版本的内容。这不提供X天前的内容,只提供“今天”、“昨天”等。我只是说,很高兴知道django内置的
naturaltime
。像
人性化
它计算
2007年2月16日13:31:29
->
1天,2小时前。