7

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

我一直在想:Mako 允许嵌入 Python 代码这一事实有什么好处?对普通乔来说有多方便?

如果没有嵌入的 Python 代码,模板就足够了吗?

4

5 回答 5

19

正如 mako主页所指出的,Mako 的优势非常明显:速度极快,任何熟悉 Python 的人都会立即熟悉其语法和功能。

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

那么你的“观众”是什么?如果是 Python 程序员,我建议 Mako(为了速度和熟悉度);如果 XML 专家对 Python 感到不舒服,那么 Genshi 可能更适合(对于“与 Python 保持距离”的方法和更接近 XML 文化的匹配)。

你提到了“普通的乔”,但乔不知道 Python 和 xpath 对他来说是一个深奥的谜;如果那真的是您的听众,那么其他模板系统(例如 Django)实际上可能更适合(帮助他避免陷入麻烦;-)。

于 2009-09-06T01:54:26.020 回答
16

如果没有嵌入的 Python 代码,模板就足够了吗?

仅当您的模板语言具有足够的逻辑功能以使其本身本质上是一种脚本语言时。在这一点上,您可能已经使用过 Python。

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

然后,您最终只是在您的 Python 业务逻辑中编写了表示帮助函数,这是一种比您开始时更糟糕的表示和应用程序逻辑的混合。因为不相信你会优雅地使用它而剥夺你权力的语言是蹩脚的。

于 2009-09-08T01:16:12.040 回答
2

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

这真的归结为品味问题。

于 2009-09-06T01:36:52.113 回答
2

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

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

于 2009-09-06T17:30:33.733 回答
0

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

于 2009-09-06T04:15:18.263 回答