我的自定义 Django 模板过滤器但没有任何其他过滤器的“无效过滤器”错误
Posted
技术标签:
【中文标题】我的自定义 Django 模板过滤器但没有任何其他过滤器的“无效过滤器”错误【英文标题】:"Invalid Filter" error for my custom Django template filters but not any other filters 【发布时间】: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。
[顺便说一句,我自己终于找到了答案,但我花了几个小时,我无法在 *** 或谷歌的任何地方找到答案,所以我将回答我自己的问题,以便其他人不会像我那样浪费太多时间]
【问题讨论】:
【参考方案1】:答案非常简单:将自定义标签和自定义过滤器拆分成两个单独的 python 文件,这样就可以了。
我怀疑问题出在:自定义标签正在使用template.loader.get_template()
加载另一个模板。该模板文件包含一个% load %
标记,该标记尝试加载定义了父自定义标记的同一文件。由于某种原因,这不起作用——可能是因为它会导致无限循环,或者因为 Django 假设它已经加载。
我没有尝试在过滤器内重新加载自定义标签,或在另一个标签内加载标签,以查看是否也出现同样的问题,但如果确实出现了,修复方法将是相同的:如果你想使用template.loader.get_template()
加载包含对您自己的自定义标签或过滤器的调用的模板,确保调用template.loader.get_template()
的文件与定义您包含的标签/文件管理器的文件不同。
【讨论】:
以上是关于我的自定义 Django 模板过滤器但没有任何其他过滤器的“无效过滤器”错误的主要内容,如果未能解决你的问题,请参考以下文章