【问题标题】:Best Python templating library to facilitate code generation [closed]促进代码生成的最佳 Python 模板库 [关闭]
【发布时间】:2010-10-11 09:33:47
【问题描述】:

与其花第二天(或一年)的时间阅读它们,还有什么建议我应该更详细地研究一下模板引擎吗?

【问题讨论】:

    标签: python templates code-generation


    【解决方案1】:

    最佳建议:全部尝试。用不了多久。

    我最喜欢的:Jinja2(一英里)

    它有不错的语法,可以通过它跟踪错误,并且可以沙盒化。

    【讨论】:

    • 似乎我已经得到了关于 Jinja2 的几个答案——在此之前我从未听说过。现在有了适当的 Google 搜索,甚至在 StackOverflow 上,我都开始工作了。谢谢。
    • 我做了一个基于Jinja2的命令行工具来做代码生成。 github.com/kblomqvist/yasha
    【解决方案2】:

    如果您正在进行代码生成,您可能会发现 Cog 很有用 - 它专门用于代码生成,而不是一种普遍适用的模板语言。

    【讨论】:

    • cog 看起来很棒:bitbucket.org/ned/cog 它已被移植到 perl、php... 这说明了很多,因为这些都是模板语言,而且他们的高级用户认为他们需要 cog
    • @Naveen Perl 是模板语言吗?
    • 确实如此。 Perl 是任何一种语言,因为它是唯一一种在数学上证明不仅图灵完备而且语法完备的语言,在 0x20 ... 0xfe(含)范围内的每个有限或无限的 ascii 字符序列都保证在语法上是正确的代码。
    【解决方案3】:

    最重要的问题是您是否可以接受模板所需的语法。第二和第三(取决于您的应用程序需求)将是速度和易于分发。

    我查看了所有这些,但我唯一能忍受的语法是Jinja。 Jinja 具有支持大量 Python 结构的优势,因此可以很容易地根据需要在模板中添加 sn-ps 的功能,而无需编写特殊的标签。其他模板系统中需要标签的大部分内容都由 Jinja 中的宏处理。

    当然,如果您正在寻找简单快捷的东西,那么在核心语言中很难击败 Python templating API

    【讨论】:

      【解决方案4】:

      更新:Kid 似乎已被Genshi 继承。

      我使用过 Kid,我认为这是较旧的系统之一。我发现它非常坚固、稳定和可靠。它是基于标签的,因此非常适合使用 XML/HTML。有趣的是,模板函数是作为 HTML 属性完成的,而不是特殊块,即 {% ... %}。但是,其中的某些方面(尤其是它“包含”的方式)可能会变得非常令人讨厌。它似乎也没有被积极开发或根本不再开发。

      如果您想要一些已经存在了一段时间并且已经变得相当稳定的东西,那么值得一看。如果您想要更新的内容,我听说过有关 Genshi 和 Jinja 的好消息。

      【讨论】:

      • Genshi 是 Kid 的正式接班人。
      【解决方案5】:

      我喜欢Clearsilver,因为它适用于多种不同的语言,并且严格执行数据和表示之间的分离。我以前使用过 Cheetah,虽然它很不错,但我不喜欢使用有时看起来像是有限形式的 Python。

      【讨论】:

        【解决方案6】:

        如果您正在使用 X[HT]ML,可以为您提供格式良好的模板的基于标签的模板系统之一是一个不错的选择。我使用PXTL,FWIW。 (它可以生成其他格式,但如果您的重点不是 XML 或 HTML,那将不是一个明智的选择。)

        我非常不喜欢那些声称通过将表达式限制为自己的小语言来“帮助您分离业务逻辑和表示”的模板系统。他们似乎不明白存在诸如“表示逻辑”之类的东西,有时它会变得复杂到需要像 Python 这样的真正语言来运行它。让您将演示逻辑与业务逻辑一起踢到应用程序中是所以不是胜利。避免!

        (有限的表达式分离迷你语言方法在 JSP 的“EL”中是有意义的,因为 Java 过于冗长而无法在模板库中使用。但是我们有 Python!它非常适合在模板中编写表达式,因为它是;删除功能并让用户学习另一种新语言对您没有任何好处。)

        【讨论】:

          【解决方案7】:

          如果您想要一个非常轻量级的选项,请尝试使用模板。它只是单个模块中的 80 行代码。看看herehere(它发表在博客上)。如果功能足以满足您的需求,我认为这是一个聪明且非常专注的解决方案。

          【讨论】:

            猜你喜欢
            • 2012-03-27
            • 2013-09-05
            • 1970-01-01
            • 1970-01-01
            • 2010-09-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-10-20
            相关资源
            最近更新 更多