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

时间:2011-02-15 22:16:38

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

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

似乎有一系列选择(Python维基有a very long list),这使选择相当艰巨。以下是我听过或使用的语言,按我个人的熟悉程度排列。

如果感兴趣,请随意将其转换为社区维基。

Django

优点:

  • 如果您使用过Django,则会有一个熟悉且简单的语法。
  • Django的精彩文档。
  • 与逻辑分离很多。
  • 积极支持和维护。

缺点:

  • 并非真正用于独立模式。如果您没有INSTALLED_APPS
  • ,我甚至不知道加载模板标记库是否有效
  • 绑定整个Django项目的时间表使得独立使用模糊。
  • 也许过于非Pythonic语法。

Jinja2

优点:

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

Genshi

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

Mako

优点:

  • 由Pylons支持,部署在像reddit.com这样的网站上

缺点:

  • 语法(从快速浏览一下)让我觉得有点不平衡。 <%%$

我认为值得考虑的一些事情也是:

  • Python 3兼容性
  • 编辑器支持(例如,是否保留了TextMate捆绑包?)

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

Cheetah

StringTemplate

1 个答案:

答案 0 :(得分: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