Система шаблонов для Python и Javascript?

Приятной особенностью шаблонов Google Soy является то, что вы можете использовать одни и те же шаблоны на клиенте (JS) и на сервере (Java).

В настоящее время я планирую отображать большинство страниц на стороне клиента, используя шаблоны Soy, скомпилированные в JS. Однако мой бэкэнд написан на Python (с использованием Tornado), поэтому я не могу легко использовать те же шаблоны на стороне сервера для создания электронных писем или статических страниц.

Я мог бы отображать эти соевые шаблоны, используя отдельный компонент Java на стороне сервера, или, возможно, даже заставить их работать в node.js. Ни один из этих вариантов не кажется особенно чистым.

Существуют ли хорошие шаблонизаторы, которые работают как на JS, так и на Python? У кого-нибудь были хорошие результаты с JSON-Template или Tenjin? Любые другие идеи?


person nickbaum    schedule 04.01.2011    source источник


Ответы (3)


Mustache — это механизм шаблонов, реализованный как на Python, так и на JavaScript (и многих других языках).

http://mustache.github.com/

person mike    schedule 04.01.2011
comment
Спасибо за ответ, Майк! У вас есть опыт его использования? Как вы его находите? Есть ли более крупные сайты, которые его используют? - person nickbaum; 09.01.2011
comment
Привет, Майк, только что заметил этот ответ. Большое спасибо, очень ценю это! Пока я все еще использую Soy, но я могу попытаться преобразовать некоторые из наших шаблонов в Mustache и посмотреть, как это работает. - person nickbaum; 18.01.2011

Майкл Керрин создал проект под названием pwt.jinja2js.

Описание Проекта:

pwt.jinja2js — это расширение механизма шаблонов Jinja2, которое компилирует допустимые шаблоны Jinja2, содержащие макросы, в JavaScript. Вывод JavaScript может быть включен через теги скрипта или может быть добавлен в JavaScript приложений.

Как указано в документации

Сдвинув переключатель, мы можем создать Java-скрипт, который использует Closure Library и выдает следующее:

Джинджа2:

{% 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();
}
person Kyle Finley    schedule 16.07.2011

Я понимаю, что это очень старый вопрос, но для справки теперь можно скомпилировать шаблоны Soy в код Python.

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

person Lukáš Lalinský    schedule 13.04.2014