Django 模板中 {% include ... %} 标签和 {% ssi ... parsed %} 标签有什么区别?
这两者看起来基本上是一样的,唯一的区别是你必须给ssi提供一个绝对路径,这是出于“安全原因”。除了关键字参数(这是从1.3版本开始新增的),这两者似乎功能完全相同。它们真的有必要分开吗?
1 个回答
6
如果在 {% ssi %}
中不加 parsed
参数,那么被包含的文件就不会被当作 Django 模板来处理,而只是普通的文本。这就意味着,如果这个文件里面有模板标签或过滤器,它们就不会被解析。
而当你加上 parsed
参数后,情况就会变得更像你说的那样。
- 使用
{% ssi %}
时会有更多的安全限制,因为你可能会包含文件系统中的任何文件。 - 你必须使用绝对 URI,而不是适合模板加载器的相对路径。
- 在 Django 1.5 之前,第一个参数(路径)必须不加引号。这意味着你不能把模板变量用作第一个参数。
关于最后一点的更多细节,可以查看 文档。