Django: 'current_tags'不是一个有效的标签库。

80

我有一个小的 Django 项目,是从朋友那里获得的。在他的系统上,代码运行得很完美。但是,在我的系统上,当运行服务器时,我会收到以下错误消息:

TemplateSyntaxError at /

'current_tags' 不是一个有效的标签库:模板库 current_tags 未找到,请尝试 django.templatetags.current_tags。

问题出现在 HTML 文件中的一行代码:

{% load current_tags %}

这段完全相同的代码在他的系统上可以正常运行且没有错误,可能是什么问题呢?


78
为了帮助他人节省查找这些问题的20分钟时间:如果您刚刚创建了自定义标签文件(这是您在给定应用程序中的第一个自定义标签),则需要重新启动Django开发服务器,以便它可以读取新文件。当这是您唯一的问题时,会显示此错误。 - chucksmash
2
@chucksmash 谢谢耶稣。 - smilebomb
2
请记得重新启动开发服务器。 - brainLoop
17个回答

88

我建议如下:

  1. (很可能)您尚未安装标签库依赖项之一。检查 current_tags.py 模块内的导入。

  2. 确保包含标签库的应用已在 settings.py 中的 INSTALLED_APPS 下注册。

  3. 确保您可以成功导入标签库。

python manage.py shell
>>> from app.templatetags import current_tags

这个问题可以简化为下面这个链接推荐的内容,即错误本身往往会误导你关于它从哪里寻找模板。它在导入时会静默忽略错误,这意味着current_tags.py本身可能有语法错误或其他原因导致它引发ImportError。

如果所有其他方法都失败了,请查看此链接:http://www.b-list.org/weblog/2007/dec/04/magic-tags/


34
如果那些方法不起作用,检查INSTALLED_APPS中应用程序的顺序。如果你的某个应用程序使用了另一个应用程序的模板标签,那么这第二个应用程序就是必需的依赖项,必须列在其前面。 - JCotton
9
如果仍然无法正常工作,删除你的 .pyc 文件并尝试再次运行(这曾经解决了我的问题)。 - semente
3
类似于上面的评论,我尝试了很多解决方法,但我没有注意到其他Django控制台实例正在使用,这导致一些库没有刷新!如果您认为一切正常,只是找不到问题所在,请关闭所有正在运行的实例,然后再试一次。 - Nimo
20
别忘了打开或重新启动它,意思是别忘了重启服务器。 ;) - tttthomasssss
1
也许这是一个愚蠢的建议,但请重新启动您的runserver。您已经习惯了每次更改Python代码时重新加载,但是当添加新的模板标签文件时,重新加载可能不会被触发,或者它无法注册新的模板标签库。 - nmgeek
卡在第三步了 - 连壳都无法启动 - "ModuleNotFoundError: No module named 'ProjectName.templatetags.custom_tags'" - 3pitt

78

我曾经遇到这个问题,通过在我的 appname/templatetags/ 目录下添加一个空的 __init__.py 文件来解决它。


10
我需要重新启动开发服务器。 - Gagandeep Singh

64

可能性有很多:

  1. 您没有重置您的 dev 服务器
  2. 在 templatetag 文件中存在依赖环路
  3. 拼写错误了某些内容(目录、文件夹、'load' 中的模板名称等)。
  4. 您忘记将应用程序添加到INSTALLED_APPS中。

13

重启服务器解决了我的问题。他们一定在文档中提到过。


6
假设您有以下结构:
- 应用程序名称 - templatetags - init.py - templates_extras.py - init.py - settings.py - manage.py
您需要确保以下几点:
1. 您的应用程序本身已安装在settings.py中的INSTALLED_APPS中(例如“Application_Name”),包括其中的“templatetags”。 2. 您的标签模块已安装在settings.py中的INSTALLED_APP中(例如“ApplicationName.templatetags.templates_extras”)。 3. 确保您在templatetags目录下有“init.py”。 4. 您需要重启服务器。 5. 在某些情况下,如果不起作用,您需要删除所有生成的*.pyc文件,然后再次尝试。

你的标签模块本身已经安装在settings.py中的INSTALLED_APP中(例如“ApplicationName.templatetags.templates_extras”)。这非常重要!你可能会认为在settings.py中只需要写上“ApplicationName”,但事实并非如此。谢谢! - cheenbabes
没有名为'ApplicationName.templatetags.templates_extras'的模块。 - 3pitt

6
我遇到了相同的错误,但原因不同,所以我告诉你(以防其他人遇到同样的问题)。
我的一切都是正确的,但是我把自定义标签放在了一个名为template_tags的文件夹中,在长时间的搜索之后,我发现它必须是templatetags,现在它可以工作了。所以请确保文件夹名称完全是templatetags。

非常好的回答。在这种情况下,Django的错误信息并不明显。 - martincho
我正准备添加这个答案,以防它还没有出现。完全是我的问题 :P - Luca Bezerra

5

对于其他遇到这种情况的人。假设您的应用程序名称是MyApp,您的标签文件夹名称为templatetags,那么在settings.py中您应该有:

INSTALLED_APPS = [
'MyApp',
'MyApp.templatetags'
]

需要在那里使用您的Django应用程序和您的应用程序包下的标记文件夹。

-> MyApp
    ---> models.py
    ---> views.py
    ---> templatetags
      -----> __init__.py
      -----> app_filters.py

在您的模板文件中:
{% load app_filters %}

同时,app_filters.py的代码如下:
# coding=utf-8
from django import template

register = template.Library()


@register.filter(name='get_item')
def get_item(dictionary, key):
    return dictionary.get(key)

检查以上所有步骤,你可能会发现问题。

1
我曾经犯过一个错误,就是加载特定的标签而不是包含该标签的文件。非常感谢。 - Ramtin

5
"

\"自定义标签\"不是一个有效的标签库错误,往往是因为自定义标签没有被加载到应用程序中。

在放置\"自定义模板标签\"的同一文件夹内放置一个空的init.py,并在终端上运行下面的代码以加载自定义模板标签

"
touch __init__.py

尽管已经有正确的目录结构,并且已经有了__init__.py文件... 直到我运行了这个命令,我才解决了这个错误。谢谢! - mungojerie
我仍然在重新启动服务器时遇到了ModuleNotFound错误。 - 3pitt

3
请确保您的templatetags文件夹已经用Python初始化,如果您不确定,请备份所有文件, 删除所有文件, 在templatetags文件夹内只创建一个init.py文件, 然后重新启动服务器, 现在您的文件夹已经在Python下运行,可以继续进行操作。
这对我很有用...

3

对我而言,错误在于在load标签中给库名加上引号。

错误写法: {% load 'library_name' %}

正确写法: {% load library_name %}

也可以参考其他答案。在来到这里之前,我解决了一些类似的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接