2011-01-04 6 views
20

Una bella funzione dei modelli di Google Soy è che è possibile utilizzare gli stessi modelli sul client (JS) e sul server (Java).Sistema di templating per Python e Javascript?

Attualmente ho intenzione di rendere la maggior parte delle pagine lato client utilizzando i modelli di Soy compilati su JS. Tuttavia, il mio backend è scritto in Python (usando Tornado), quindi non posso usare facilmente gli stessi template sul lato server per generare e-mail o pagine statiche.

Potrei eseguire il rendering di questi modelli di soia utilizzando un componente Java separato sul lato server, o forse anche farli funzionare in node.js. Nessuna di queste opzioni sembra particolarmente pulita.

Esistono motori di templating validi sia in JS che in Python? Qualcuno ha avuto buoni risultati con JSON-Template o Tenjin? Altre idee?

risposta

11

Moustache è un motore di modelli che è stato implementato sia in Python che in JavaScript (e in molte altre lingue).

http://mustache.github.com/

+0

Grazie per la risposta, Mike! Hai esperienza nell'usarlo? Come lo trovi? Ci sono siti più grandi che lo usano? – nickbaum

+0

Gestisco un modulo con i baffi per un framework Java MVC chiamato Play (https://github.com/murz/play-mustache). I grandi siti che utilizzano i baffi includono Twitter, LinkedIn, Zendesk. C'è una lista qui: https://github.com/janl/mustache.js/wiki/Beard-Competition – mike

+0

Hey Mike, ho appena notato questa risposta. Grazie mille, lo apprezzo davvero! Per il momento sto ancora usando Soy, ma potrei provare a convertire alcuni dei nostri modelli in Moustache e vedere come funziona. – nickbaum

7

Michael Kerrin ha creato un progetto chiamato pwt.jinja2js

Descrizione del progetto:

pwt.jinja2js è un'estensione per il motore di template Jinja2 che compila i modelli Jinja2 valido contenente le macro a JavaScript . L'output di JavaScript può essere incluso tramite tag di script o può essere aggiunto al codice JavaScript dell'applicazione.

Come indicato nel documentation

Facendo scivolare un interruttore possiamo produrre Java Script che sfrutta Chiusura Biblioteca e produce il seguente:

Jinja2:

{% namespace ns1 %} 

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

diventa:

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

Grazie per il suggerimento! – nickbaum

2

Mi rendo conto che questa è una domanda molto vecchia ma per il riferimento, è ora possibile compilare i modelli di Soy in codice Python.

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