Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我应该用Mako做模板吗?_Python_Template Engine_Mako_Genshi - Fatal编程技术网

Python 我应该用Mako做模板吗?

Python 我应该用Mako做模板吗?,python,template-engine,mako,genshi,Python,Template Engine,Mako,Genshi,我一直在考虑一个模板解决方案,尽管我的选择是Mako和Genshi。我觉得在根植做模板有点难看,所以我更倾向于Mako 我想知道:Mako允许嵌入Python代码这一事实有什么好处?这对普通人来说方便吗 如果没有内嵌的Python代码,模板就足够了吗?这似乎是一个宗教问题。Django模板采取强硬路线:模板中没有代码。他们这样做是因为他们的历史是一个在商店中使用的系统,在那里编写代码的人和创建页面的人之间有着明显的区别。其他人(也许你)没有这样明确的区分,在布局和逻辑之间有一条更灵活的线会让你感

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

我想知道:Mako允许嵌入Python代码这一事实有什么好处?这对普通人来说方便吗


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

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

这实际上是一个品味的问题。

正如mako指出的,mako的优势是非常明显的:速度非常快,在语法和功能方面对任何熟悉Python的人都非常熟悉

Genshi选择“解释”而不是提前生成Python代码(根据他们的观点,这是为了澄清错误消息),并对Python采用“公平”的方法(例如,使用xpath作为选择器,xinclude代替继承等)因此,对于不懂Python但精通XML的人来说,这可能更为自然

那么你的“观众”是什么?如果是Python程序员,我建议Mako(为了速度和熟悉度);如果XML专家不喜欢Python,那么Genshi可能更适合(因为“与Python保持一定距离”的方法更接近XML文化)


您提到了“普通的Joe”,但Joe不懂Python,xpath对他来说是一个很深的秘密;如果这真的是你的听众,那么像Django这样的其他模板系统实际上可能更适合(帮助他避免陷入麻烦;-)。

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

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

这样做的一个重要结果是Evoque能够在沙箱中执行模板求值——也就是说,您可以安全地让不受信任的用户对模板的源代码进行写访问——这一特性对于同样允许嵌入python语句的模板引擎来说几乎是不可能的。哦,虽然在直接的功能比较中没有任何损失,但Evoque在某些情况下实际上比Mako更快,而且它也在Python 3上运行

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

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

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


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

幸运的是,如果你有兴趣(在其他地方),在Django使用Mako是非常容易的