Система шаблонов для Python и Javascript? - PullRequest
21 голосов
/ 04 января 2011

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

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

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

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

Ответы [ 3 ]

11 голосов
/ 04 января 2011

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

http://mustache.github.com/

7 голосов
/ 16 июля 2011

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

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

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

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

Путем скольженияПереключатель мы можем создать 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 голосов
/ 13 апреля 2014

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...