Django创建模板过滤器以获得美好时光

时间:2011-05-31 23:10:53

标签: python django django-template-filters

我知道有timesince过滤器。

但是我想要一些能够回归的东西:

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

示例:

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

我该如何实现这样的目标?

2 个答案:

答案 0 :(得分:14)

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

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

<强> settings.py

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

<强> template.html

{% load humanize %}
{{ model.timefield|naturaltime }}

答案 1 :(得分: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
相关问题