Django模板中的load标签范围是什么?

4

在Django模板系统中,使用load加载的自定义标签的范围是什么,特别是在模板继承方面?

如何在模板层次结构树中有效地加载相同的自定义标签。我在文档中找不到任何信息。任何指针都将是有用的。

谢谢。


我的猜测是,它仅限于模板文件,无论是否继承。 - Rahul
1个回答

7
我也对此有所疑惑,并发现文档缺乏相关说明,因此我决定自己进行一些测试。截至django 1.4,答案是:加载的自定义标签的作用域严格限制在加载它的文件(使用{% load %})中,绝对不涉及其他任何内容。以下尝试使用自定义标签均失败:
  • 模板A通过extend扩展了模板B:
    • 在A中加载并尝试在B中使用
    • 在A中加载并尝试在B中的一个块中使用
    • 在A的块中加载并尝试在B的同一块中使用,无论是否使用super关键字
  • 模板A通过include包含了模板B:
    • 在A中加载并尝试在B中使用
    • 在A中加载并尝试通过with context显式传递给B
  • 模板A使用`{% ssi ... parsed %}`包含了模板B:
    • 在A中加载并尝试在B中使用
因此,它严格限制在每个文件中(这很好,因为它使得从远程位置插入神秘标记变得不可能 - 除非您故意通过干扰全局加载器来这样做(您不应该这样做))。

好的测试!它确实可以防止神秘标签,但对于可能来自超级-超级-超级块的JavaScript代码也是如此,您将不得不跟踪多个模板才能找到它 :-) - Rahul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接