Django:'current_tags'不是一个有效的标签库
我有一个朋友从我收到的小Django项目。 代码完美地在他的系统上运行。 但是,在我的系统上运行服务器时出现以下错误信息:
TemplateSyntaxError at /
'current_tags'不是一个有效的标签库:找不到模板库current_tags,试过django.templatetags.current_tags
问题是在HTML文件中的一行:
{% load current_tags %}
这个完全相同的代码在他的系统上工作没有错误。 那可能是什么?
我会build议如下:
-
(很有可能)您还没有安装标签库的某个依赖项。 检查
current_tags.py
模块内的导入。 -
确保包含标签库的应用程序在
INSTALLED_APPS
下的settings.py
注册。 -
确保您可以成功导入标签库。
python manage.py shell >>> from app.templatetags import current_tags
这可以归结下面的链接build议,这是错误本身往往误导你在哪里寻找一个模板。 它静静地忽略导入错误,这意味着
current_tags.py
本身可能有语法错误,或者为什么会引发ImportError。
如果一切都失败了,请查看这个链接: http : //www.b-list.org/weblog/2007/dec/04/magic-tags/
我有这个问题,并通过在我的appname / templatetags /目录中添加一个空白的__init__.py
文件来修复它。
可能性很多:
- 你还没有重置你的开发服务器 。
- 你在templatetag文件中有依赖循环 。
- 拼写错误 (目录,文件夹,“加载”模板名称等)。
- 你忘了将应用程序添加到INSTALLED_APPS 。
重新启动服务器已经解决了我的问题。 他们必须在文件中提到它。
我得到了同样的错误,但出于不同的原因,所以我会告诉你(以防其他人出现同样的问题)。
我有一切权利,但我有一个名为template_tags
的文件夹内我的自定义标签,经过漫长的search,我发现它必须是templatetags
标签,现在它的工作。 所以检查文件夹名称是完全templatetags
。
假设你有以下结构:
– 应用名称
——- templatetags
————– init .py
————–templates_extras.py
——- init .py
——-settings.py
– manage.py
你必须确保以下内容:
-
你的“templatetags”驻留的应用程序本身实际上安装在settings.py的INSTALLED_APPS中(例如“Application_Name”)
-
您在“templatetags”内存在的标签模块本身已经安装在settings.py的INSTALLED_APP中(例如“ApplicationName.templatetags.tempaltes_extras”)
-
确保在templatetags目录下有“ init .py”
-
你必须重新启动服务器
-
在某些情况下,如果不工作,则必须删除所有生成的* .pyc,然后重试
“自定义标签”不是有效的标签库错误,更经常发生的原因是自定义标签没有加载到应用程序中。
在您的“自定义模板标签”所在的同一文件夹中放置一个空的init .py,并在terminal上运行以下代码以加载自定义模板标签
touch __init__.py
请确保你的templatetags文件夹是用python初始化的,如果你有疑问,只要把所有的文件都打包好,
删除所有文件,在templatetags文件夹内只创buildinit .py文件,然后重新启动服务器,
现在你的文件夹在Python下,然后做你的东西。
这适用于我…
确保load
语句正确。 它应该是文件的名称,而不是应用程序的名称。 例如,如果你有这个应用程序:
appname ├── __init__.py ├── templatetags │ ├── __init__.py │ └── foobarfilename.py
那么你应该把它放在你的模板中:
{% load foobarfilename %}
当然,你也应该检查其他答案。
创build模板标签后,它应该位于settings.INSTALLED_APPS中安装的应用程序中的“templatetags”包内,确保您重新启动开发服务器。
对于其他面临这一点。 假设你的App名称是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)
检查所有上述步骤,你可能会发现这个问题。
对我来说,这是在load
标签中引用库名称的错误。
错误: {% load 'library_name' %}
正确: {% load library_name %}
也请参阅其他答案。 我在登陆这里之前解决了一些问题。
所有在这里列出的build议并没有帮助我。 所以在我的具体情况下,问题是,模板标签必须从第三方应用程序加载,我手动将该应用程序的源文件夹复制到我的virtualenv src
文件夹中。 然后我运行python setup.py install
在该文件夹内。 之后,django无法加载这个模块。
然后,我删除了这个应用程序的源文件和安装文件夹,并在将相关行添加到requirements.txt
文件后,使用pip install -r requirements.txt
进行pip install -r requirements.txt
。 它被下载到src
文件夹中,安装完毕,一切正常。 希望这有助于某人。
也许有人会发现这有用:不知何故,我已经命名目录'templatetags '
而不是'templatetags'
,就是 – 最后一个空格。 花了几个小时才终于实现。
在我的情况下,我已经使用标记variables而不是寄存器variables创build库实例
tag = template.Library()
但应该是
register = template.Library()
要成为有效的标签库,模块必须包含一个名为register的模块级variables,该variables是一个template.Library实例,其中注册了所有的标签和filter