Django 创建友好的时间模板过滤器
我知道有一个叫做 timesince
的过滤器。
但是我想要的是能返回以下内容的东西:
- 刚刚几秒钟前
- X分钟前
- X小时前
- 在$星期几
- X周前
- X个月前
举个例子:
- 刚刚几秒钟前
- 37分钟前
- 2小时前
- 昨天
- 在星期四
- 1周前
- 7个月前
我该如何实现这样的功能呢?
2 个回答
4
编辑:如果你使用的是最近的Django SVN版本(1.3之后),可以参考Pastylegs的回答。否则,你可以按照下面的方法操作:
我使用了repoze.timeago来实现这个功能。这个代码相对简单,所以如果需要的话,你可以根据自己的需求进行修改。
这里有一个我创建的Django自定义过滤器,叫做elapsed
,它使用了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
16
不确定这是否完全符合你的需求,但在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 }}