Django 模板中 {% include ... %} 标签和 {% ssi ... parsed %} 标签有什么区别?

4 投票
1 回答
2172 浏览
提问于 2025-04-16 19:25

这两者看起来基本上是一样的,唯一的区别是你必须给ssi提供一个绝对路径,这是出于“安全原因”。除了关键字参数(这是从1.3版本开始新增的),这两者似乎功能完全相同。它们真的有必要分开吗?

1 个回答

6

如果在 {% ssi %} 中不加 parsed 参数,那么被包含的文件就不会被当作 Django 模板来处理,而只是普通的文本。这就意味着,如果这个文件里面有模板标签或过滤器,它们就不会被解析。

而当你加上 parsed 参数后,情况就会变得更像你说的那样。

  • 使用 {% ssi %} 时会有更多的安全限制,因为你可能会包含文件系统中的任何文件。
  • 你必须使用绝对 URI,而不是适合模板加载器的相对路径。
  • 在 Django 1.5 之前,第一个参数(路径)必须不加引号。这意味着你不能把模板变量用作第一个参数。

关于最后一点的更多细节,可以查看 文档

撰写回答