Django - 无法在模板中加载自定义过滤器

时间:2016-10-02 10:47:45

标签: python django django-templates

我想将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;不是注册的标签库。

我的错误在哪里?

2 个答案:

答案 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