Python 的模板系统或语言(主要用于 HTML)
我在寻找一个成熟、易用、功能强大、独立的“漂亮”的模板系统或语言,适用于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 个回答
抱歉,我还没有足够的声望来留言,所以我就把这个当作回答来写。
我只用过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