【问题标题】:Template system or language for Python (primarily HTML)Python 的模板系统或语言(主要是 HTML)
【发布时间】:2011-06-27 23:10:19
【问题描述】:

我正在寻找一种成熟、易于使用、功能强大、独立、“漂亮”的 Python 模板系统/语言。我主要对从 HTML 源生成(静态)HTML 感兴趣(因此 Markdown/RST/Textile 不相关)。

似乎有很多选择(Python wiki 有a very long list),这让选择变得相当艰巨。以下是我听说过或使用过的语言,按我个人的熟悉程度排名。

如果有兴趣,请随时将其制作成社区 wiki。

Django

优点:

  • 如果您使用过 Django,请熟悉且简单的语法。
  • Django 很棒的文档。
  • 与逻辑有很大的分离。
  • 积极支持和维护。

缺点:

  • 并非真正用于独立模式。如果您没有任何INSTALLED_APPS,我什至不知道加载模板标签库是否有效。
  • 与整个 Django 项目的日程安排相关,使得单机使用变得模糊。
  • 也许是过于非 Pythonic 的语法。

Jinja2

优点:

  • 语法本质上是 Django++
  • 可配置语法
  • 维护良好
  • 良好的文档

Genshi

  • XHTML:ish 语法(好还是坏?)
  • 因此锁定生成基于 XML 的输出?
  • 可以在模板中直接使用 Python (<?python ... ?>)

Mako

优点:

  • 由 Pylons 支持,部署在 reddit.com 等网站上

缺点:

  • 语法(乍一看)让我觉得有点不平衡。 <%%$?

我认为值得考虑的还有:

  • Python 3 兼容性
  • 编辑器支持(例如,是否有维护的 TextMate 包?)

我承认我对以下内容一无所知,除了他们有丑陋的网站。

Cheetah

StringTemplate

【问题讨论】:

  • 我听到很多人都在讨论 Jinja 和 Genshi ......你有什么具体的争论吗?
  • @vicvicvic:我喜欢 Django/Jinja 语法,因为恕我直言,它对于非程序员 UI 设计师来说更安全/更容易。在 Jinja 中,您可以将参数传递给方法,这是我在 Django 中错过的。
  • 我对 Jinja2 有很好的体验,肯定是你需要的。
  • 我更喜欢使用函数式风格的纯 Python。
  • 运行一个简单的 Django 应用程序并不太令人头疼。您可以在很短的时间内启动并运行一个基本的静态站点,并且无需设置数据库即可利用模板语法。也超级容易插入其他模板系统,甚至可以自己编写。

标签: python html templates template-engine html-generation


【解决方案1】:

抱歉,还没有代表离开 cmets,所以我会留下这个作为答案。

我只用过 django 和 mako。似乎这两种模板语言之间的主要区别在于 Django 的设计好像你不能真正信任模板设计者。您可以从它们如何限制您可以在模板中使用的代码中看到这一点,并且它们不允许在模板中使用 python 代码。 (提示关于 python 代码是否属于模板的辩论)。对于我的项目,我既是程序员又是设计师,所以 Django 挡了我的路。

Mako 只是将模板解析为文本块和 python 代码,并带有一些辅助函数。这意味着 Mako 的代码要小得多,而且在你已经熟悉 python 的情况下,它似乎比 Django 学习起来要快得多。

例如:我能找到在 django 中分配变量的唯一方法是使用 with 块:

{% with total=business.employees.count %}
    {{ total }} 
{% endwith %}

(请注意,business.employees.count 实际上是一个函数 (business.employees.count()))。

而 Mako 中的等效代码是:

<% total = business.employees.count() %>
${total}

Django 大师:请随时纠正我。我的经验有限,但这就是我从 Django 转为 Mako 的原因。

如果您只是想了解语法,这似乎是对不同模板系统的一个相当不错的基础比较:http://catherinedevlin.pythoneers.com/cookoff.html

【讨论】:

    猜你喜欢
    • 2011-07-23
    • 2020-12-04
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多