21

Google 的 Soy 模板的一个很好的特性是您可以在客户端 (JS) 和服务器 (Java) 上使用相同的模板。

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

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

有没有在 JS 和 Python 中运行的好的模板引擎?有没有人用 JSON-Template 或 Tenjin 取得好的结果?还有其他想法吗?

4

3 回答 3

11

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

http://mustache.github.com/

于 2011-01-04T07:20:57.357 回答
7

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

项目描述:

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

文档中所述

通过滑动开关,我们可以生成利用闭包库的 Java 脚本并生成以下内容:

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();
}
于 2011-07-16T08:20:31.833 回答
2

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

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

于 2014-04-13T12:50:51.157 回答