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

时间:2011-03-30 23:45:29

标签: python django portability

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

  

/ 中的TemplateSyntaxError      

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

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

{% load current_tags %}

这个完全相同的代码在他的系统上运行,没有错误。那可能是什么?

17 个答案:

答案 0 :(得分:80)

我建议如下:

  1. (最有可能)您尚未安装标记库的某个依赖项。检查current_tags.py模块中的导入。

  2. 确保包含代码库的应用程序已在settings.py INSTALLED_APPS下的python manage.py shell >>> from app.templatetags import current_tags 中注册。

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

    current_tags.py

    这归结为以下链接推荐的内容,即错误本身会误导您从哪里寻找模板。它默默地忽略导入时的错误,这意味着{{1}}本身可能会出现语法错误或其引发ImportError的其他原因。

  4. 如果其他一切都失败了,请检查以下链接: http://www.b-list.org/weblog/2007/dec/04/magic-tags/

答案 1 :(得分:74)

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

答案 2 :(得分:62)

可能性很多:

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

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

,但是没有,这有效。