【问题标题】:"Invalid Filter" error for my custom Django template filters but not any other filters我的自定义 Django 模板过滤器但没有任何其他过滤器的“无效过滤器”错误
【发布时间】:2011-05-23 23:02:36
【问题描述】:

我的 Django 项目中有一个 python 文件,其中包含一个自定义模板标签和一个自定义模板过滤器。

我的自定义标签使用template.loader.get_template() 加载另一个模板文件。这很好用...直到我将自定义过滤器添加到加载的模板中。

现在我得到一个 Django“无效过滤器”TemplateSyntaxError 异常。查看调用堆栈,Django 无法加载我的模板过滤器。

这就是事情变得奇怪的地方。我可以使用来自另一个模板的自定义过滤器。我可以在自定义标签加载的模板中使用任何其他过滤器。但是我不能在我自己的自定义标签中使用我自己的过滤器。

这种情况的明显原因是没有在我的模板 HTML 中加载我的自定义标签/过滤器文件,但我正确地加载了它。 (因为当我不加载它时,我会得到一个不同的错误——“invalid block tag”)

我在 Python 2.7 上运行 Django 1.2.3。

[顺便说一句,我自己终于找到了答案,但我花了几个小时,我无法在 stackoverflow 或谷歌的任何地方找到答案,所以我将回答我自己的问题,以便其他人不会像我那样浪费太多时间]

【问题讨论】:

    标签: python django django-templates django-template-filters


    【解决方案1】:

    答案非常简单:将自定义标签和自定义过滤器拆分成两个单独的 python 文件,这样就可以了。

    我怀疑问题出在:自定义标签正在使用template.loader.get_template() 加载另一个模板。该模板文件包含一个{% load %} 标记,该标记尝试加载定义了父自定义标记的同一文件。由于某种原因,这不起作用——可能是因为它会导致无限循环,或者因为 Django 假设它已经加载。

    我没有尝试在过滤器内重新加载自定义标签,或在另一个标签内加载标签,以查看是否也出现同样的问题,但如果确实出现了,修复方法将是相同的:如果你想使用template.loader.get_template() 加载包含对您自己的自定义标签或过滤器的调用的模板,确保调用template.loader.get_template() 的文件与定义您包含的标签/文件管理器的文件不同。

    【讨论】:

      猜你喜欢
      • 2018-03-15
      • 2015-11-08
      • 1970-01-01
      • 2019-01-31
      • 2018-07-28
      • 1970-01-01
      • 2017-01-29
      • 2011-05-28
      • 1970-01-01
      相关资源
      最近更新 更多