Django:“ current_tags”不是有效的标签库


76

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

/的TemplateSyntaxError

'current_tags'不是有效的标签库:找不到模板库current_tags,尝试过django.templatetags.current_tags

问题出在html文件中的一行:

{% load current_tags %}

此完全相同的代码可在他的系统上正常工作,没有错误。那会是什么呢?


77
为了节省他人,我花了20分钟来解决这些问题:如果您刚刚创建了自定义标签文件(这是给定应用程序中的第一个自定义标签),则需要重新启动Django开发服务器,它可以提取新文件。当这也是您唯一的问题时,将显示此错误。
chucksmash

1
@chucksmash谢谢耶稣。
smilebomb

1
记得重新启动开发服务器
brainLoop

Answers:


87

我建议以下内容:

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

  2. 确保包括标签库中注册的应用程序settings.pyINSTALLED_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 2011年

9
如果仍然无法正常工作,请删除您的.pyc文件,然后重试(一次解决了我的问题)
semente 2013年

3
与上面的评论类似,我尝试了许多修复程序,但没有注意到正在使用其他Django控制台实例,这导致某些库无法刷新!如果您认为一切正常,但找不到问题,请关闭所有正在运行的实例,然后重试。
Nimo 2014年

20
不要忘记打开和关闭它;),这意味着不要忘记重新启动服务器
tttthomasssss14

1
也许这是愚蠢的建议,但是重新启动运行服务器。每次更改python代码时,您都习惯于重新加载,但是重新加载不是通过添加新的模板标签文件触发的,或者它没有注册新的模板标签库。
nmgeek

77

我遇到了这个问题,并通过__init__.py在我的appname / templatetags /目录中添加一个空白文件来解决此问题。


10
我不得不重启开发服务器。
Gagandeep Singh

64

可能性很多:

  1. 您尚未重置开发服务器
  2. 您在templatetag文件中有依赖项循环
  3. 拼写错误(目录,文件夹,“加载”中的模板名称等)。
  4. 您忘记将应用程序添加到INSTALLED_APPS了


6

我遇到了相同的错误,但原因有所不同,所以我会告诉您(以防其他人遇到相同的问题)。

我一切正常,但是我的自定义标签位于一个名为的文件夹中template_tags,经过长时间的搜索,我发现它必须为templatetags,现在可以使用了。因此,检查文件夹名称是否正确templatetags


极好的答案。在这种情况下,Django的错误消息并不明显。
martincho

我正要添加此答案,以防万一它不在这里。正是我的问题:P
卢卡·贝扎拉

6

假设您具有以下结构:

- 应用名称

------- templatetags

--------------初始化.py

--------------templates_extras.py

-------初始化.py

-------settings.py

-manage.py

您必须确保以下几点:

  • 您的“模板标签”所在的应用程序本身实际上已安装在settings.py中的INSTALLED_APPS中(例如,“ Application_Name”)

  • 您位于“ templatetags”内部的标签模块本身已经安装在settings.py中的INSTALLED_APP中(例如“ ApplicationName.templatetags.tempaltes_extras”)

  • 确保您在templatetags目录下有“ init .py”

  • 您必须重新启动服务器

  • 在某些情况下,您必须删除所有生成的* .pyc(如果它不起作用),然后重试


您位于“ templatetags”内部的标签模块本身已经安装在settings.py中的INSTALLED_APP中(例如,“ ApplicationName.templatetags.templates_extras”)。这至关重要!您可能会认为settings.py中的“ ApplicationName”就足够了,但事实并非如此。谢谢!
cheenbabes

没有名为“ ApplicationName.templatetags.templates_extras”的模块
3pitt

5

“自定义标签”不是有效的标签库错误,因为自定义标签未加载到应用中,因此更经常发生。

将一个空的init同一文件夹内的.py在您的“自定义模板标签”被置于与终端上运行下面的代码加载自定义模板标签

touch __init__.py

尽管具有正确的目录结构,并且已经有init .py文件在其中...在运行此命令之前,我一直收到此错误。谢谢!
mungojerie 2015年

我仍然收到ModuleNotFound错误(尝试重新启动服务器时)
3pitt

4

对于其他面临这个问题的人。假设您的应用程序名称为,MyApp而标签文件夹名称为,templatetagssettings.py您应具有:

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

那里既需要django应用程序,又需要位于应用程序包下的tag文件夹。

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

3

请确保您的templatetags文件夹已使用python初始化,如果您有疑问,请对所有文件进行处理,

删除所有文件,在templatetags文件夹内仅创建init .py文件,然后重新启动服务器,

现在,您的文件夹位于Python下,然后做您的工作。

这对我有用...


3

对我来说,在load标记中的库名两边加上引号是错误的。

错误: {% load 'library_name' %}

正确: {% load library_name %}

也请参考其他答案。在着陆之前,我也解决了其中一些问题。


2

确保load声明正确无误。它应该是文件名,而不是应用程序名。例如,如果您有此应用程序:

appname
├── __init__.py
├── templatetags
│   ├── __init__.py
│   └── foobarfilename.py

然后,应将其放在模板中:

{% load foobarfilename %}

当然,您也应该检查其他答案。


2

创建模板标记后,它应该位于settings.INSTALLED_APPS中安装的应用程序的“ templatetags”包中。请确保重新启动开发服务器。


1

也许有人会觉得这很有用:以某种方式我已将目录命名为'templatetags '而不是'templatetags',即-在末尾加一个空格。花了几个小时终于意识到。


0

此处列出的所有建议均无济于事。因此,在我的特定情况下,问题在于必须从第三方应用程序加载templatetag,然后我将带有该应用程序的源文件夹手动复制到src了virtualenv中的文件夹中。然后我python setup.py install进入那个文件夹。之后,django无法加载该模块。

然后,我删除了该应用程序的源代码和安装文件夹,并pip install -r requirements.txt在将相关行添加到requirements.txt文件后使用进行了安装。它已下载到该src文件夹中,已安装,并且一切正常开始。希望这对某人有帮助。


0

就我而言,我使用标记变量而不是寄存器变量创建了库实例

tag = template.Library()

但这应该是

register = template.Library()

要成为有效的标签库,模块必须包含名为register的模块级变量,该变量是template.Library实例,在其中注册了所有标签和过滤器


0

就我而言,问题是,我正在使用 {% load filter_method_name %}

我不得不换成 {% filename %}


0

以我为例-我正在使用

@register.inclusion_tag('template-to-use.html')

我忘了创建该模板,并立即开始工作。我知道以上答案与大多数问题有关-但希望也许有人觉得它有用。它应该已经传给我了:

Template does not exist

但是没有,这有效。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.