Django模板中的{%include ...%}标记和{%ssi ...已解析的%}标记之间有什么区别?

all*_*ode 4 python django django-templates

它们似乎基本上是相同的,除了你必须给ssi一个绝对路径的"安全性原因".除了关键字参数(从版本1.3开始是新的),两者似乎具有完全相同的功能.他们真的多余吗?

bra*_*ers 6

如果没有包含文件的parsed参数{% ssi %}将不被视为Django模板,它将被包含为普通文本.这意味着如果包含的文件具有模板标记/过滤器,则不会解释它们.

当你包括parsed参数,差异变得越来越像你说的是什么.

  • {% ssi %}由于您可能在文件系统中包含任何文件,因此添加了安全限制.
  • 您必须使用绝对URI而不是适合模板加载器的相对路径.
  • 在Django 1.5之前,第一个参数(路径)必须是不加引号的.这意味着您不能将模板变量用作第一个参数.

关于文档中最后一点的更多细节.

  • 说实话,我认为它主要是一个遗留标签,为了向后兼容而没有被删除(这是Django中的一个高优先级).它不是我曾在生产中使用过的标签. (2认同)