2011-01-04 10 views
20

Una característica interesante de plantillas de soja de Google es que se pueden utilizar las mismas plantillas en el cliente (JS) y en el servidor (Java).Sistema de plantillas para Python y Javascript?

Actualmente tengo la intención de hacer la mayoría de las páginas del lado del cliente utilizando plantillas de soja compilados a JS. Sin embargo, mi backend está escrito en Python (usando Tornado), por lo que no puedo usar fácilmente las mismas plantillas del lado del servidor para generar correos electrónicos o páginas estáticas.

pude hacer que estas plantillas de soja utilizando un componente de Java independiente en el lado del servidor, o tal vez incluso hacer que funcionen en node.js. Ninguna de esas opciones parece particularmente limpia.

¿Hay buenas motores de plantillas que se ejecutan tanto en JS y Python? ¿Alguien ha tenido buenos resultados con JSON-Template o Tenjin? ¿Alguna otra idea?

Respuesta

11

bigote es un motor de plantillas que se ha implementado tanto en Python y JavaScript (y muchos otros idiomas).

http://mustache.github.com/

+0

Gracias por la respuesta, Mike! ¿Tienes experiencia usándolo? ¿Cómo lo encuentras? ¿Hay sitios más grandes que lo usan? – nickbaum

+0

Mantengo un módulo de bigote para un framework Java MVC llamado Play (https://github.com/murz/play-mustache). Los sitios grandes que usan bigote incluyen Twitter, LinkedIn, Zendesk. Hay una lista aquí: https://github.com/janl/mustache.js/wiki/Beard-Competition – mike

+0

Hola Mike, acabo de darme cuenta de esta respuesta. Muchas gracias, realmente lo aprecio! Todavía estoy usando Soy por ahora, pero puedo intentar convertir algunas de nuestras plantillas a Moustache y ver cómo funciona. – nickbaum

7

Michael Kerrin ha creado un proyecto llamado pwt.jinja2js

Descripción del proyecto:

pwt.jinja2js es una extensión para el motor de plantillas Jinja2 que compila las plantillas que contienen macros Jinja2 válidos tener JavaScript . El resultado de JavaScript se puede incluir a través de etiquetas de script o se puede agregar a las aplicaciones de JavaScript.

Como se indica en la documentation

Deslizando un interruptor podemos producir Java Script que se aprovecha de Cierre Biblioteca y produce lo siguiente:

Jinja2:

{% namespace ns1 %} 

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

se convierte en:

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(); 
} 
+0

¡Gracias por la sugerencia! – nickbaum

2

Me doy cuenta de que esta es una pregunta muy antigua, pero para la referencia, ahora es posible compilar las plantillas de Soy con el código de Python.

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

Cuestiones relacionadas