2011-05-31 29 views
6

我知道那裏有timesince過濾器。Django創建模板過濾器好時光

但我想要的東西,返回此:

  • 只需幾秒鐘前
  • X分鐘前
  • X小時前
  • 在$ DAY_NAME
  • X星期前
  • X幾個月前

例子:

  • 只需幾秒鐘前
  • 38分鐘前
  • 3小時前
  • 昨天
  • 週四
  • 1個星期前
  • 7個月前

How我可以執行這樣的事嗎?

回答

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

很酷,我不知道這件事。這是在Django 1.3之後添加的;你必須從SVN中繼獲取它。 – 2011-06-01 14:01:39

+0

太棒了,我越來越喜歡Django;) – starcorn 2012-04-27 14:52:31

4

編輯:如果您正在使用最近的Django SVN簽出(post 1.3),請參閱Pastylegs的回答。否則,您可以執行以下操作:

爲此,我使用repoze.timeago。代碼非常簡單,所以你可以根據需要定製它。

這是我創建的使用repoze.timeago的Django自定義過濾器0123'。

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