2016-10-02 84 views
2

我想将“delta time”显示为“x天前”。我尝试过Django的timesince过滤器,但它返回'x天,x分钟'。我只想显示几天。我尝试了人性化的自然时间,但我想它只适用于DateTimeField。我使用的是DateField。Django - 无法在模板中加载自定义过滤器

我有一个像这样的自定义过滤器(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 

我加入了“应用”到INSTALLED_APPS settings.py中 我想在这样的模板使用此过滤器;

{% extends 'app/base.html' %} 
{% load app_filters %} 

{{ entry.date_updated | days_since }} 

然后我得到错误:'app_filters'不是注册的标签库。

我的错误在哪里?

+0

可以加载从壳过滤器文件?在'python manage.py shell'中尝试类似'from app.templatetags import app_filters'。也有可能在app_filters.py的某个地方出现错误,并且Django没有把它传递给你。另外,请原谅明显的问题,但您是否尝试重新启动服务器? – borfast

+0

'app_filters.py'没有错误,我只是试了一下,它工作得很好。我确实遇到了与你一样的错误,但在我的情况下,这是因为我的'templatetags'文件夹位于错误的位置,因此即使该应用程序在“INSTALLED_APPS”中也没有被拾取。这可能是你的情况吗? – borfast

+0

尝试在项目目录中创建您的模板标签文件夹。它将按预期工作。 – Aniket

回答

4

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

0

我有一个类似的问题:以及重新启动,以确保您的filters.py类在INSTALLED_APPS django否则他们将不会被拿起。

The app that contains the custom tags must be in INSTALLED_APPS in order for the {% load %} tag to work. This is a security feature: It allows you to host Python code for many template libraries on a single host machine without enabling access to all of them for every Django installation.

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

相关问题