【问题标题】:Django - Can't load custom filter in templatesDjango - 无法在模板中加载自定义过滤器
【发布时间】: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


【解决方案1】:

我意识到我需要重新启动 Web 服务器才能加载自定义模板过滤器。这就是这种情况下的解决方案。

【讨论】:

    【解决方案2】:

    我遇到了类似的问题:除了重新启动之外,还要确保您的 filters.py 类在 Django 的 INSTALLED_APPS 中,否则它们将不会被拾取。

    包含自定义标签的应用程序必须在 INSTALLED_APPS 中才能使 {% load %} 标签工作。这是一项安全功能:它允许您在单个主机上托管多个模板库的 Python 代码,而无需为每个 Django 安装启用对所有模板库的访问。

    https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#howto-custom-template-tags

    【讨论】:

      猜你喜欢
      • 2017-01-29
      • 1970-01-01
      • 2014-02-13
      • 2019-06-06
      • 2011-05-28
      • 2012-04-25
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      相关资源
      最近更新 更多