2009-09-06 12 views
7

Ho preso in considerazione una soluzione per i modelli, anche se le mie scelte sono tra Mako e Genshi. Trovo che i modelli di Genshi siano un po 'brutti, quindi mi sto spostando di più verso Mako.Devo usare Mako per il Templating?

Sono andato a chiedermi: cosa c'è di così buono nel fatto che Mako consente il codice Python incorporato? Com'è conveniente per il joe medio?

Non sarebbe sufficiente il template JUST senza avere incorporato il codice Python?

risposta

18

Come fa notare il mako homepage, i vantaggi di Mako sono piuttosto chiari: incredibilmente veloce, immediatamente familiare a chiunque sia a portata di mano con Python in termini di sintassi e funzionalità.

Genshi sceglie "interpretazione" invece di ahead-of-time generazione di codice Python (in base alla loro FAQ, che è per chiarezza di messaggi di errore) ed un metodo "lunghezza del braccio" per Python (ad esempio utilizzando xpath per selettori, xinclude invece dell'eredità, ecc.) quindi potrebbe essere più naturale per le persone che non conoscono Python ma sono molto competenti con XML.

Allora, qual è il tuo "pubblico"? Se programmatori Python, suggerisco Mako (per velocità e familiarità); se esperti di XML che non si sentono a loro agio con Python, Genshi potrebbe essere più adatto (per l'approccio "a regola d'arte da Python" e una corrispondenza più stretta con la cultura XML).

Si parla di "Joe medio", ma Joe non conosce Python E xpath è un misterioso oscuro per lui; se QUESTO fosse davvero il tuo pubblico, altri sistemi di template come quelli di Django potrebbero essere in realtà più adatti (aiutalo a evitare di mettersi nei guai ;-).

2

Questo sembra essere un po 'un problema religioso. I modelli di Django prendono una linea dura: nessun codice nei modelli. Lo fanno a causa della loro storia come sistema utilizzato nei negozi dove c'è una netta separazione tra chi scrive codice e chi crea pagine. Altri (forse voi) non fanno una distinzione così netta e si sentirebbero più a loro agio con una linea più flessibile tra il layout e la logica.

Si tratta davvero di una questione di gusti.

0

Puoi disciplinarti a non inserire alcun codice Python all'interno del modello a meno che non sia davvero l'ultima risorsa per completare il lavoro. Ho affrontato un problema simile con il modello di Django in cui devo fare qualche seria ginnastica CSS per mostrare il mio contenuto. Se avessi potuto usare del codice Python nel template, sarebbe stato meglio.

+0

Fortunatamente, è molto facile usare Mako in Django, se sei così inclinato (http://code.google.com/p/django-mako/ tra altri luoghi) –

2

Genshi è concepito (leggi: distorto, ottimizzato) per la generazione di documenti xml (anche se offre supporto per la generazione di qualsiasi tipo di documento di testo). I modelli di Mako e Django sono concepiti come testo generico. Evoque anche, ma con una differenza fondamentale che rende la scelta progettuale di consentire solo python espressioni in modelli senza pitone dichiarazioni.

Un importante risultato netto di questo è che Evoque è in grado di eseguire la valutazione del modello in una sandbox, ovvero si può tranquillamente dare agli utenti non fidati accesso in scrittura al codice sorgente di un modello, una funzionalità praticamente impossibile per i motori di template che consente anche l'incorporamento delle dichiarazioni python . Oh, e pur non perdendo alcuna in un confronto diretto caratteristica, Evoque è in alcuni casi effettivamente più veloce di Mako, e funziona anche su Python 3.

15

non sarebbe templating SOLO sufficiente senza dover codice Python incorporato?

Solo se il linguaggio dei modelli ha abbastanza funzionalità logiche che è essenzialmente un linguaggio di scripting in sé. A quel punto, potresti aver usato Python.

I siti più coinvolti richiedono spesso una logica di presentazione complessa e strutture di modelli non banali come sezioni ripetute in luoghi/pagine diversi e alberi ricorsivi. Non è divertente se la tua lingua dei modelli ti lega le mani dietro la schiena perché prende la posizione religiosa che "il codice nel modello è MALE".

Quindi si finisce semplicemente a scrivere le funzioni di presentazione helper nella logica di business Python, che è una combinazione peggiore di presentazione e logica dell'applicazione rispetto alla prima. Le lingue che ti tolgono il potere perché non si fidano che tu la usi con gusto sono zoppicanti.