我应该使用Mako进行模板化吗?

时间:2009-09-06 01:11:38

标签: python template-engine mako genshi

我一直在考虑一个模板解决方案,尽管我的选择是在Mako和Genshi之间。我觉得Genshi的模板有点难看,所以我更倾向于Mako。

我开始怀疑:Mako允许嵌入式Python代码这一事实有什么好处?一般的乔怎么方便?

如果没有嵌入Python代码,那么模板化是否足够?

5 个答案:

答案 0 :(得分:18)

正如mako homepage指出的那样,Mako的优势非常明显:疯狂的速度,在语法和功能方面对Python很方便的任何人都很熟悉。

Genshi选择“解释”而不是提前的Python代码生成(根据他们的FAQ,这是为了清晰的错误消息)和Python的“臂长”方法(例如,使用xpath为选择器,xinclude而不是继承等)所以对于那些不懂Python而且非常熟悉XML的人来说可能更自然。

那么你的“观众”是什么?如果是Python程序员,我建议Mako(速度和熟悉程度);如果XML专家对Python感到不舒服,那么Genshi可能更适合(“从Python开始”,与XML文化更接近)。

你提到“普通的乔”,但乔不知道Python和xpath对他来说是一个深刻的黑暗之谜;如果这真的是你的观众,其他模板系统,如Django可能实际上更合适(帮助他避免陷入困境; - )。

答案 1 :(得分:15)

  

如果没有嵌入Python代码,那么模板化是否足够?

只有当您的模板语言具有足够的逻辑功能时,它本身就是一种脚本语言。在这一点上,您可能也使用过Python。

更多涉及的网站通常需要复杂的表示逻辑和非平凡的模板化结构,例如在不同的地方/页面和递归树中重复的部分。如果你的模板语言将你的双手绑在背后,这并不好玩,因为它的宗教立场是“模板中的代码很糟糕”。

然后,您最终会在Python业务逻辑中编写演示助手函数,这是演示和应用程序逻辑的混合比您开始时更糟糕的。由于他们不相信你有品味地使用它而使你失去权力的语言是蹩脚的。

答案 2 :(得分:2)

这似乎是一个宗教问题。 Django模板很难:模板中没有代码。他们这样做的原因在于他们作为商店中使用的系统的历史,其中编写代码的人与创建页面的人之间存在明显的分离。其他人(也许你)并没有做出如此明确的区分,并且在布局和逻辑之间有一条更灵活的界限会感觉更舒服。

这真的归结为品味问题。

答案 3 :(得分:2)

Genshi被设想(阅读:有偏见,优化)用于生成xml文档(即使它确实支持生成任何类型的文本文档)。 Mako和Django模板被设想为通用文本模板系统。 Evoque也有,但有一个根本区别,它使设计选择只允许模板中的python 表达式,即没有python 语句

这样做的一个重要结果是Evoque能够在沙箱中执行模板评估 - 即您可以安全地为不受信任的用户提供对模板源代码的写访问权限 - 这对于模板引擎几乎是不可能的。还允许嵌入 python语句。哦,虽然在直接的功能比较中没有丢失任何东西,但在某些情况下,Evoque实际上比Mako更快,而且它也可以在Python 3上运行。

答案 4 :(得分:0)

你可以自律,不在模板中注入任何Python代码,除非它真的是完成工作的最后手段。我遇到了与Django模板类似的问题,我必须做一些严肃的CSS体操才能显示我的内容。如果我可以在模板中使用一些Python代码,那就更好了。