nic*_*aum 21 javascript python templates google-closure-templates
Google的Soy模板的一个很好的功能是您可以在客户端(JS)和服务器(Java)上使用相同的模板.
目前我计划使用编译为JS的Soy模板在客户端呈现大多数页面.但是,我的后端是用Python编写的(使用Tornado),所以我不能轻易地使用相同的模板服务器端来生成电子邮件或静态页面.
我可以在服务器端使用单独的Java组件渲染这些大豆模板,或者甚至可以让它们在node.js中工作.这两种选择都不是特别干净.
是否有任何良好的模板引擎可以在JS和Python中运行?有没有人用JSON-Template或天神取得好成绩?还有其他想法吗?
Michael Kerrin创建了一个名为pwt.jinja2js的项目
项目描述:
pwt.jinja2js是Jinja2模板引擎的扩展,它将包含宏的有效Jinja2模板编译为JavaScript.JavaScript输出可以通过脚本标记包含在内,也可以添加到应用程序JavaScript中.
如文档中所述
通过滑动开关,我们可以生成利用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 %}
Run Code Online (Sandbox Code Playgroud)
变为:
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();
}
Run Code Online (Sandbox Code Playgroud)