如何在Django中发现自定义模板标签

时间:2011-12-26 12:11:02

标签: django django-templates

我想制作自定义模板标记,然后按照here给出的步骤进行操作。据说我需要将我的模板标签存储在应用程序的目录中。所以我创建了一个新的应用程序,将模板标签放在那里并将应用程序包含在installed APPS中。

但是当我在模板中尝试load模板标记时,我收到以下错误:

'generic_tags' is not a valid tag library: Template library generic_tags not found,

当我看到它搜索的目录时,我的应用程序的templatetags库就不存在了。这意味着它不会在我创建的应用中搜索模板标签。我是否还需要在settings.py文件中添加任何内容?

我的模板标签定义文件是

import datetime

from django import template
from django.utils.translation import ugettext, ungettext

register = template.Library()

@register.filter(name='timesince_human')
def humanize_timesince(date):
    if not date:
        return

    delta = datetime.datetime.now() - date

    num_years = delta.days / 365
    if (num_years > 0):
        return ungettext(u"%d year ago", u"%d years ago", num_years) % num_years

    num_weeks = delta.days / 7
    if (num_weeks > 0):
        return ungettext(u"%d week ago", u"%d weeks ago", num_weeks) % num_weeks

    if (delta.days > 0):
        return ungettext(u"%d day ago", u"%d days ago", delta.days) % delta.days

    num_hours = delta.seconds / 3600
    if (num_hours > 0):
        return ungettext(u"%d hour ago", u"%d hours ago", num_hours) % num_hours

    num_minutes = delta.seconds / 60
    if (num_minutes > 0):
        return ungettext(u"%d minute ago", u"%d minutes ago", num_minutes) % num_minutes

    return ungettext(u"%d second ago", u"%d seconds ago", delta.seconds) % delta.seconds

并且它已存储在名为templatetag的应用的utilityapp目录中,我还包含了__init__.py文件

2 个答案:

答案 0 :(得分:0)

您的创作

__init__.py 

在templatetags目录中? EXEC

register = template.Library()

在你的文件中?

答案 1 :(得分:0)

确保您的模板标签定义之前有register = template.Library() 。如果它之后它将无法正常工作。还要确保templatetag目录中存在 init .py,并检查错误输出的其余部分以查看是否还有其他用途。