何时在Python中使用模板引擎?

6
作为一个 Python 的“新手”,主要背景是编写用于自动化系统管理相关任务的脚本,我对何时使用某些工具没有太多的感觉。
但我非常有兴趣在何时何地使用特定的工具/技术上培养直觉。
我看到很多关于模板引擎的提及,包括 zedshawLamson 中使用 Jinja2。
因此,我想向社区寻求一些建议,了解何时何地我应该考虑使用模板引擎,例如 Jinja2, Genshi, Mako 等。
3个回答

9

正如@mikem所说,模板有助于在正确的条件下生成任何形式的输出。本质上,我在Python中编写的第一件有意义的事情是一个模板系统--YAPTU,用于另一个Python模板实用程序--而那是8年前的事情,在其他好的这样的系统存在之前......不久之后,我有荣幸让彼得·诺维格(Peter Norvig)增强了它(请参见这里),现在它在搜索引擎上几乎有2,000次点击;-)。

今天的模板引擎在许多方面都有很大改进(尽管大多数是针对HTML输出而专门设计的),但基本思想仍然存在--为什么要在Python代码中打印大量print语句和硬编码字符串,当它甚至可以更容易地将字符串放在可编辑的模板文件中?如果您想要(例如)具有输出法语、英语或意大利语的能力(这是我第一次熟悉Python时YAPTU的最初动机...!),只需从正确的目录(其中文本已适当翻译)获取模板就会使一切变得非常容易!!!
基本上,我认为,每当您要输出文本类似的东西时,使用模板系统很可能是个好主意。例如,我已经使用了YAPTU或其改编来平滑地在JSON、XML和人类可读的(实际上是HTML)输出之间进行切换;一个真正好的模板系统,在这个时代,实际上应该能够超越“文本类似”的限制并以protobuf或其他二进制序列化格式输出。

哪种模板系统最好完全取决于您的具体情况 - 如果我在您的位置,我会研究(并尝试)其中的几个。有些是为那些不能编程的UI设计师编辑而设计的,还有一些仅供程序员使用;许多专门针对HTML,一些针对XML,其他则更为通用;等等。但是其中的某一个(或您自己的Yet Another one!-)肯定比一堆print更好!-)


非常出色而且有幫助的回答。我覺得我現在更清楚,在什麼情況下應該使用模板引擎,才不會遇到問題。 - solarce
1
我自从发布这个问题以来走了很长的路程,但对于未来搜索到它的人来说可能有用的是,我一直在使用较新的模板工具http://github.com/defunkt/pystache进行最近的项目,并发现它是一个非常不错的轻量级模板工具。 - solarce

3
一个模板引擎通过模板来编程生成工件。模板指定了工件的骨架,程序填充空白部分。这可以用于生成几乎任何东西,无论是HTML、某种脚本(例如:RPM SPEC文件)、稍后可执行的Python代码等。

0
简单来说,模板让您轻松地手写一个易于阅读的文档,并添加非常简单的标记以识别应由变量替换的区域、应重复的区域等。
通常,模板语言只能执行基本的“模板逻辑”,即仅足以影响文档的布局,但不足以影响提供给模板以填充文档的数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接