我想将delta时间显示为&x 39; x天前'。我尝试过Django的过滤器,但是它会返回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
我添加了应用程序&#39;到settings.py中的INSTALLED_APPS 我试图在这样的模板中使用此过滤器;
{% extends 'app/base.html' %}
{% load app_filters %}
{{ entry.date_updated | days_since }}
然后我收到错误:&#39; app_filters&#39;不是注册的标签库。
我的错误在哪里?
答案 0 :(得分:6)
我意识到我需要重新启动Web服务器才能加载自定义模板过滤器。这是这种情况下的解决方案。
答案 1 :(得分:0)
我遇到了类似的问题:除了重启之外,请确保您的filters.py类在django的INSTALLED_APPS范围内,否则它们将无法被接收。
包含自定义标记的应用必须位于INSTALLED_APPS中才能使{%load%}标记生效。这是一个安全功能:它允许您在单个主机上托管许多模板库的Python代码,而无需为每个Django安装启用所有模板库。
https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#howto-custom-template-tags