比较web.py的Templator和Jinja2:优点和缺点

时间:2011-08-30 14:18:47

标签: python templates web.py jinja2

我正在为现有的软件添加一个简单的Web界面; web.py恰到好处地适合这项工作,这正是我正在使用的。现在我正在研究使用什么模板引擎,并提出了两种选择:使用web.py自己的Templator或使用Jinja2。

我已经在应用程序中工作了,我正在编写一些非常简单的模板来探索它们。我必须说我觉得Templator更容易阅读,这可能是因为我是一名程序员而不是网页设计师(谁可能会更容易找到Jinja?)。

虽然我现在只生成(不符合;)丑陋的HTML页面,但我还会使用模板引擎来生成电子邮件和旧的纯文本文件。

对于任何实际目的而言,这两种软件都“足够快”,我想问一下在易用性,代码清洁度,灵活性方面,广泛使用其中一种或两种或两者的优点和缺点的人。等等。

2 个答案:

答案 0 :(得分:4)

快速浏览Templator(我从未使用过)并将其与Jinja2(我已经广泛使用过)进行比较,我会说两者非常相似......但是,温度计更接近Mako而不是金贾。

Mako和Jinja都支持:

  • 模板继承(您可以拥有所有网页继承的布局)
  • 空白控制

Mako和Templator都支持:

  • 在模板中嵌入“安全”Python。

所有三项支持:

  • 添加到模板上下文(函数,对象,变量,作品)
  • 定义函数以在模板中封装可重用的功能块(Jinja称它们为“宏”。)
  • 条件和循环
  • 设置和获取局部变量。
  • 表达评估
  • 缓存已编译的字节码以加快将来的执行。

Templator支持奇怪的事情,我不相信Jinja或Mako:

  • 在模板代码中设置已编译模板对象的属性。 (坦率地说,实际上使用该功能似乎是错误的。你的模板可以确定的任何标志需要根据上下文传递的内容设置,应该已经 设置为你的申请代码。)

Jinja获取模板代码并将它们编译为Python字节码,但它会为所有内容编写代码,而不是将字符串传递给Python解释器以使用safe_eval。通过这样做,Jinja2在理论上对模板级别的某些类型的攻击免疫(但是当你从模板中获得恶意输入时,你通常会遇到更大的问题)。

至于其余部分,这完全取决于您对语法的偏好。

答案 1 :(得分:1)

Templetor对我来说最难的是模板继承。而不是存在的的简单概念,例如在Jinja2中,您必须在应用程序代码中选择一次基本模板,然后在基本模板中访问实际模板时执行奇怪的属性设置。如果您需要多个“大”块(如页面主体),您仍然会遇到问题。

真正的块更加优雅,而且Templetor的“真正的”Python的灵活性并不是必需的,但它可能不安全。