Python 的模板系统或语言(主要用于 HTML)

2 投票
1 回答
817 浏览
提问于 2025-04-16 11:53

我在寻找一个成熟、易用、功能强大、独立的“漂亮”的模板系统或语言,适用于Python。我主要想从HTML源文件生成(静态)HTML(所以Markdown/RST/Textile不相关)。

看起来有很多选择(Python的维基上有一长串列表),这让选择变得有点困难。以下是我听说过或使用过的语言,按我个人的熟悉程度排序。

如果大家有兴趣,可以把这个变成社区维基。

Django

优点:

  • 如果你用过Django,语法很熟悉且简单。
  • Django的文档非常棒。
  • 逻辑和模板有很好的分离。
  • 有积极的支持和维护。

缺点:

  • 并不是特别适合独立使用。我甚至不知道如果没有任何INSTALLED_APPS,加载模板标签库是否有效。
  • 独立使用时受整个Django项目的进度影响,感觉不太清晰。
  • 语法可能有点不够Python风格。

Jinja2

优点:

  • 语法基本上是Django的升级版。
  • 语法可配置。
  • 维护得很好。
  • 文档也不错。

Genshi

  • 语法有点像XHTML(好还是不好?)
  • 因此可能只能生成XML格式的输出?
  • 可以在模板中直接使用Python(<?python ... ?>

Mako

优点:

  • 由Pylons支持,已经在像reddit.com这样的网站上使用。

缺点:

  • 从我快速浏览的情况来看,语法有点不太一致。<%%$

我认为还有一些值得考虑的因素:

  • Python 3的兼容性。
  • 编辑器支持(比如有没有维护的TextMate包?)

我承认我对以下内容一无所知,只知道它们的网站很丑。

Cheetah

StringTemplate

1 个回答

4

抱歉,我还没有足够的声望来留言,所以我就把这个当作回答来写。

我只用过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

撰写回答