7

我知道有timesince过滤器。

但我想要返回这个的东西:

  • 就在几秒钟前
  • X 分钟前
  • X 小时前
  • 在 $day_name
  • X 周前
  • X 个月前

例子:

  • 就在几秒钟前
  • 37 分钟前
  • 2小时前
  • 昨天
  • 星期四
  • 1周前
  • 7个月前

我怎样才能实现这样的事情?

4

2 回答 2

15

不确定它是否勾选了所有框,但 django.contrib.humanize 模板标签中有一个标签naturaltime应该这样做:

https://docs.djangoproject.com/en/dev/ref/contrib/humanize/#naturaltime

设置.py

INSTALLED_APPS = {
    ...
    'django.contrib.humanize',
}

模板.html

{% load humanize %}
{{ model.timefield|naturaltime }}
于 2011-06-01T00:13:08.653 回答
4

编辑:如果您使用最近的 Django SVN 结帐(1.3 后),请参阅 Pastylegs 的答案。否则,您可以执行以下操作:

为此,我使用repoze.timeago。代码相当简单,因此您可以根据需要对其进行自定义。

elapsed这是我创建的一个 Django 自定义过滤器,它使用 repoze.timeago。

import datetime
from django import template
import repoze.timeago

register = template.Library()

# If you aren't using UTC time everywhere, this line can be used
# to customize repoze.timeago:
repoze.timeago._NOW = datetime.datetime.now

@register.filter(name='elapsed')
def elapsed(timestamp):
    """
    This filter accepts a datetime and computes an elapsed time from "now".
    The elapsed time is displayed as a "humanized" string.
    Examples:
        1 minute ago
        5 minutes ago
        1 hour ago
        10 hours ago
        1 day ago
        7 days ago

    """
    return repoze.timeago.get_elapsed(timestamp)
elapsed.is_safe = True
于 2011-05-31T23:18:05.050 回答