我有一个我从朋友那里收到的小型Django项目。该代码完美地适用于他的系统。但是,在我的系统上运行服务器时收到以下错误消息:
/ 中的TemplateSyntaxError
'current_tags'不是有效的标记库:找不到模板库current_tags,尝试过django.templatetags.current_tags
问题在于html文件中的一行:
{% load current_tags %}
这个完全相同的代码在他的系统上运行,没有错误。那可能是什么?
答案 0 :(得分:80)
我建议如下:
(最有可能)您尚未安装标记库的某个依赖项。检查current_tags.py
模块中的导入。
确保包含代码库的应用程序已在settings.py
INSTALLED_APPS
下的python manage.py shell
>>> from app.templatetags import current_tags
中注册。
确保您可以成功导入标记库。
current_tags.py
这归结为以下链接推荐的内容,即错误本身会误导您从哪里寻找模板。它默默地忽略导入时的错误,这意味着{{1}}本身可能会出现语法错误或其引发ImportError的其他原因。
如果其他一切都失败了,请检查以下链接: http://www.b-list.org/weblog/2007/dec/04/magic-tags/
答案 1 :(得分:74)
我遇到了这个问题并通过在我的appname / templatetags /目录中添加一个空白的__init__.py
文件来修复它。
答案 2 :(得分:62)
可能性很多:
答案 3 :(得分:10)
重启服务器为我解决了这个问题。他们必须在文档中提到它。
答案 4 :(得分:6)
我得到了同样的错误但出于不同的原因所以我会告诉你(如果其他人遇到同样的问题)。
我把一切都搞定了,但我将自定义标记放在名为template_tags
的文件夹中,经过长时间的搜索,我发现它必须是templatetags
,现在它可以正常工作了。所以检查文件夹名称是templatetags
。
答案 5 :(得分:6)
假设您具有以下结构:
- Application_Name
------- templatetags
--------------的初始化强>的.py
-------------- templates_extras.py
-------的初始化强>的.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,然后重试
答案 6 :(得分:5)
“自定义标记”不是有效的标记库错误,更常发生,因为自定义标记未加载到应用中。
在放置“自定义模板标记”的同一文件夹中放置一个空的 init .py,并在终端上运行以下代码以加载自定义模板标记
touch __init__.py
答案 7 :(得分:3)
对于面对此的其他人。假设您的应用名称为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)
检查上述所有步骤,您可能会发现问题。
答案 8 :(得分:3)
请确保你的templatetags文件夹是用python初始化的,如果你有疑问,只需要拿出所有文件的bakup,
删除所有文件, 在templatetags文件夹中只创建 init .py文件, 然后重启你的服务器,
现在你的文件夹在Python下,然后做你的东西。
这对我有用......
答案 9 :(得分:3)
对我来说,错误是在load
标记中放置库名称的引号。
错误:{% load 'library_name' %}
正确:{% load library_name %}
也请参阅其他答案。在降落之前我也解决了其中的几个问题。
答案 10 :(得分:2)
确保load
声明正确无误。它应该是文件的名称,而不是应用程序的名称。例如,如果你有这个应用程序:
appname
├── __init__.py
├── templatetags
│ ├── __init__.py
│ └── foobarfilename.py
然后你应该把它放在你的模板中:
{% load foobarfilename %}
当然,您也应该检查其他答案。
答案 11 :(得分:2)
创建模板标记后,它应位于settings.INSTALLED_APPS中安装的应用程序的“templatetags”包中,请确保重新启动开发服务器。
答案 12 :(得分:1)
也许有人会觉得这很有用:不知何故,我将目录'templatetags '
命名为'templatetags'
而不是spark.authenticate=true
,即 - 最后有一个空格。花了好几个小时才终于实现。
答案 13 :(得分:0)
这里列出的所有建议都没有帮助我。所以在我的具体情况下,问题是必须从第三方应用程序加载模板标签,我手动将该应用程序的源文件夹复制到我的virtualenv中的src
文件夹中。然后我在该文件夹中运行python setup.py install
。之后django无法加载此模块。
然后我删除了此应用的源和已安装文件夹,并在pip install -r requirements.txt
文件中添加相关行后使用requirements.txt
进行了安装。它已下载到src
文件夹中,已安装,一切正常。希望这有助于某人。
答案 14 :(得分:0)
就我而言 我使用标记变量创建了库实例,而不是注册变量
tag = template.Library()
但它应该是
register = template.Library()
要成为有效的标记库,模块必须包含模块级别 变量named register是一个template.Library实例,其中 所有标签和过滤器都已注册
答案 15 :(得分:0)
我的问题是
我正在使用{% load filter_method_name %}
我不得不更改为{% filename %}
答案 16 :(得分:0)
在我的情况下-我正在使用
@register.inclusion_tag('template-to-use.html')
我忘了创建该模板,并立即开始工作。我知道以上答案与大多数问题有关-但希望也许有人觉得它有用。它应该已经传给我了:
Template does not exist
,但是没有,这有效。