Python和Javascript的模板系统?

时间:2011-01-04 07:03:39

标签: javascript python templates google-closure-templates

Google的大豆模板的一个不错的功能是,您可以在客户端(JS)和服务器(Java)上使用相同的模板。

目前我计划使用编译为JS的Soy模板在客户端呈现大多数页面。但是,我的后端是用Python编写的(使用Tornado),所以我不能轻易地使用相同的模板服务器端来生成电子邮件或静态页面。

我可以在服务器端使用单独的Java组件渲染这些大豆模板,或者甚至可以让它们在node.js中工作。这些选项似乎都不是特别干净。

在JS和Python中是否有任何良好的模板引擎?有没有人用JSON-Template或天神取得好成绩?还有其他想法吗?

3 个答案:

答案 0 :(得分:11)

Mustache是​​一个模板引擎,已经在Python和JavaScript(以及许多其他语言)中实现。

http://mustache.github.com/

答案 1 :(得分:7)

Michael Kerrin创建了一个名为pwt.jinja2js

的项目

项目说明:

  

pwt.jinja2js是Jinja2模板引擎的扩展,它将包含宏的有效Jinja2模板编译为JavaScript。 JavaScript输出可以通过脚本标记包含在内,也可以添加到应用程序JavaScript中。

documentation

中所述
  

通过滑动开关,我们可以生成利用Closure Library的Java Script并生成以下内容:

的Jinja2:

{% namespace ns1 %}

{% macro printusers(users) %}
<ul>
{% for user in users %}
    <li><a href="{{ user.url }}">{{ user.username }}</a></li>
{% endfor %}
</ul>
{% endmacro %}

变为:

goog.provide('ns1');

goog.require('soy');

ns1.printusers = function(opt_data, opt_sb) {
    var output = opt_sb || new soy.StringBuilder();
    output.append('\n<ul>\n');
    var userList = opt_data.users;
    var userListLen = userList.length;
    for (var userIndex = 0; userIndex < userListLen; userIndex++) {
        var userData = userList[userIndex];
   output.append('\n   <li><a href="', userData.url, '">', userData.username, '</a></li>\n');
}
    output.append('\n</ul>\n');
    if (!opt_sb) return output.toString();
}

答案 2 :(得分:2)

我意识到这是一个非常古老的问题,但作为参考,现在可以将Soy模板编译为Python代码。

https://pypi.python.org/pypi/soy