繁体   English   中英

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

[英]Comparing web.py's Templator and Jinja2: strengths and weaknesses

我正在向已经存在的软件中添加一个简单的Web界面; web.py非常适合此工作,这就是我正在使用的。 现在,我正在研究使用哪种模板引擎,并归结为两种选择:使用web.py自己的模板或使用Jinja2。

我已经在应用程序中都工作过,并且都在编写一些非常简单的模板来探索它们。 我必须说,我觉得Templator更容易阅读,这可能是由于我是一名程序员而不是一名Web设计师(谁可能会觉得Jinja更容易?)。

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

两种软件对于任何实际目的都是“足够快”的,我想问一问广泛使用一种或两种软件的人,它们在易用性,代码整洁度,灵活性等方面的优缺点是什么? 。

快速浏览一下Templator (我从未使用过)并将其与Jinja2 (我已经广泛使用过)进行比较,我想说两者非常相似...但是Templator更类似于Mako而不是Jinja 。

Mako和Jinja都支持:

  • 模板继承(您可以拥有所有页面都继承自的布局)
  • 空格控制

虽然Mako和Templator都支持:

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

所有三种支持:

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

模板支持我不相信Jinja或Mako会做的奇怪事情:

  • 从模板代码中在已编译的模板对象上设置属性。 (坦率地讲,实际上是利用该功能的似乎是错误的事情要做。你的模板可以决定需要从哪些已经通过在上下文应该已经通过您的应用程序代码设置中设置任何标志。)

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

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

在Templetor中,对我而言最困难的是模板继承。 代替例如Jinja2中存在的简单概念,您必须在应用程序代码中选择一次基本模板,然后在实际模板中进行奇怪的属性设置,同时在基本模板中访问它。 如果您需要多个像页面正文这样的“大”块,仍然会遇到问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM