【问题标题】:When to use a Templating Engine in Python?何时在 Python 中使用模板引擎?
【发布时间】:2009-06-23 04:29:34
【问题描述】:

作为 Python 的“新手”,并且主要具有编写用于自动化系统管理相关任务的脚本的背景,我对在哪里使用某些工具没有太多了解。

但我对培养在何处使用特定工具/技术的直觉非常感兴趣。

我看到很多关于模板引擎的提及,包括 zedshawLamson 中谈论使用 Jinja2

所以我想我会请社区为我提供一些建议,让我知道我应该在哪里/何时知道我应该考虑使用模板引擎,例如Jinja2GenshiMako 等。

【问题讨论】:

    标签: python templates template-engine


    【解决方案1】:

    正如@mikem 所说,模板有助于在适当的条件下生成您喜欢的任何形式的输出。从本质上讲,我用 Python 编写的第一个有意义的东西是模板系统——YAPTU,代表 Yet Another Python Templating Utility——那是 8 多年前的事了,当时还没有其他这样的系统存在。 .. 不久之后,我有幸让 Peter Norvig(见 here)对它进行了改进,现在它在搜索引擎上的点击量接近 2,000 次;-)。

    今天的模板引擎在许多方面都好得多(尽管大多数都非常专业,尤其是 HTML 输出),但基本思想仍然存在——为什么要在 Python 代码中使用大量 print 语句和硬编码字符串,什么时候更容易将字符串放入可编辑的模板文件中?如果您希望(例如)能够以法语、英语或意大利语输出(这是 YAPTU 在一个激烈的黑客周末期间的最初动机,因为我第一次熟悉 Python ......!-),能够从正确的目录(文本被适当翻译的地方)获取您的模板将使一切变得更加容易!!!

    基本上,我认为模板系统更可能不是一个好主意,只要您输出文本式的东西。例如,我使用 YAPTU 或其改编版在 JSON、XML 和人类可读(实际上是 HTML)输出之间平滑切换;在这个时代,一个非常好的模板系统实际上应该能够超越“text-ish”限制并以protobuf 或其他二进制序列化格式输出。

    哪种模板系统最好完全取决于您的具体情况 - 无论如何,我会研究(并试验)其中的一些。有些是为 UI 设计师(不会编程)应该编辑它们的情况而设计的,其他的仅供程序员使用;许多是专门针对 HTML 的,一些是针对 XML 的,还有一些是更通用的;等等等等。但是其中一些(或你自己的又一个!-)肯定比一堆prints!-)

    【讨论】:

    • 优秀而有用的答案。我想我会更好地了解何时我可能会“碰到”我应该使用模板引擎的情况。
    • 自发布此问题以来,我已经走了很长一段路,但可能与偶然发现它的未来搜索有关,因为我一直在使用更新的模板工具,github.com/defunkt/pystache 用于最近的项目和发现它是一个非常不错的轻量级模板工具。
    【解决方案2】:

    模板引擎使用模板以编程方式生成工件。模板指定了工件的骨架,而程序则填补了空白。这可以用来生成几乎任何东西,无论是 HTML、某种脚本(即:RPM SPEC 文件)、可以稍后执行的 Python 代码等。

    【讨论】:

      【解决方案3】:

      简单地说,模板让您可以轻松地手动编写人类可读的文档,并添加非常简单的标记来识别应该被变量替换的区域、应该重复的区域等。

      通常,模板语言只能执行基本的“模板逻辑”,这意味着仅足以影响文档布局的逻辑,但不足以影响提供给模板以填充文档的数据。

      【讨论】:

        猜你喜欢
        • 2011-01-05
        • 2011-02-26
        • 1970-01-01
        • 2011-08-24
        • 2016-06-20
        • 2011-08-18
        • 2021-04-11
        • 2012-01-10
        • 1970-01-01
        相关资源
        最近更新 更多