【发布时间】:2017-02-10 11:44:03
【问题描述】:
我想将增量时间显示为“x 天前”。我尝试了Django的timesince过滤器,但它返回'x天,x分钟'。我只想显示几天。我尝试了人性化的自然时间,但我猜它只适用于 DateTimeField。我正在使用 DateField。
我有一个像这样的自定义过滤器 (app_filters.py);
from django import template
from datetime import date
register = template.Library()
@register.filter(name='days_since')
def days_since(value):
delta = value - date.today()
if delta.days == 0:
return 'Today'
elif delta.days < 1:
return '{} days ago'.format(abs(delta.days))
elif delta.days == 1:
return 'Tomorrow'
elif delta.days > 1:
return 'In {} days'.format(delta.days)
这是应用程序文件夹;
app/
models.py
views.py
...
templatetags/
__init__.py
app_filters.py
我在 settings.py 中将“应用程序”添加到 INSTALLED_APPS 我正在尝试在这样的模板中使用此过滤器;
{% extends 'app/base.html' %}
{% load app_filters %}
{{ entry.date_updated | days_since }}
然后我收到错误消息:“app_filters”不是已注册的标签库。
我的错误在哪里?
【问题讨论】:
-
你能从 shell 加载过滤器文件吗?在
python manage.py shell中尝试类似from app.templatetags import app_filters的内容。 app_filters.py 中也有可能存在错误,而 Django 没有将其传递给您。另外,请原谅这个明显的问题,但您是否尝试重新启动服务器? -
app_filters.py中没有错误,我刚试了一下,效果很好。我确实遇到了与您相同的错误,但在我的情况下,这是因为我的templatetags文件夹位于错误的位置,因此即使应用程序位于INSTALLED_APPS中也没有被拾取。你的情况也会这样吗? -
尝试在项目目录中创建您的模板标签文件夹。它将按预期工作。
标签: python django django-templates