常见问题

为什么叫Jinja?

“金家”是日本人 Shinto shrine ,或者temple,temple和temple有相似的英语发音。它不是以 city in Uganda

Jinja有多快?

在模板引擎中,JJJA的速度相对较快,因为它将模板代码编译并缓存为Python代码,因此不需要每次都对模板进行解析和解释。呈现一个模板变得尽可能地接近于执行一个Python函数。

JJJA还广泛使用缓存。模板在加载后按名称缓存,因此以后使用模板可以避免加载。模板加载本身使用字节码缓存来避免重复编译。缓存可以是外部的,以便在重新启动后保持不变。模板也可以作为快速的Python导入进行预编译和加载。

我们不喜欢基准,因为它们不能反映实际使用情况。业绩取决于许多因素。不同的引擎有不同的默认配置和权衡,这使得如何设置有用的比较变得不清楚。通常,数据库访问、API调用和数据处理对性能的影响比模板引擎大得多。

在模板中加入逻辑不是个坏主意吗?

毫无疑问,您应该尝试从模板中删除尽可能多的逻辑。逻辑更少,模板更容易理解,潜在的副作用更少,编译和呈现速度更快。但没有任何逻辑的模板意味着在呈现之前必须在代码中完成处理。做这件事的模板引擎是随附的,名为 string.Template ,虽然它绝对是快速的,但它并不方便。

JJJA的块、语句、过滤器和函数调用等特性使编写表现性模板变得更加容易,而且限制很少。JJJA不允许在模板中使用任意的Python代码,也不允许在Python语言中包含所有可用的功能。这使引擎更易于维护,并使模板更具可读性。

模板中需要一些逻辑才能让每个人都满意。模板中太多的逻辑可能会使其推理和维护变得复杂。您可以决定您的应用程序将如何工作,并平衡您想要在模板中放入多少逻辑。

为什么HTML不是默认的转义?

JJJA提供了一个功能,可以在呈现的模板中避开HTML语法。但是,它在默认情况下是禁用的。

JJJA是一个通用的模板引擎,它不仅仅用于Html文档。您可以生成纯文本、LaTeX、电子邮件、CSS、JavaScript、配置文件等。对于这些文档类型中的任何一种,HTML转义都没有意义。

虽然自动转义意味着您不太可能遇到XSS问题,但它还需要在编译和呈现期间进行大量额外处理,这可能会降低性能。JJJA使用MarkupSafe进行转义,它为速度提供了优化的C代码,但它仍然引入了跨方法和格式跟踪转义的开销。