Nascondere i dettagli dell'implementazione su un sistema di template e-mail scritto in Python

StackOverflow https://stackoverflow.com/questions/405509

Domanda

Sto scrivendo un'applicazione in cui una delle funzionalità è consentire all'utente di scrivere un modello di posta elettronica utilizzando la sintassi Markdown.

Oltre alla formattazione, l'utente deve essere in grado di utilizzare i segnaposto per un paio di variabili che verrebbero sostituite in fase di esecuzione.

Il modo in cui funziona attualmente è molto semplice: i modelli hanno i segnaposto Pythonic% (var) s e li sostituisco con un dizionario prima di applicare la formattazione Markdown2.

Si scopre che l'utente finale di questo sistema sarà un esperto di tecnologia e non vorrei rendere ovvio a tutti che è scritto in Python.

Non è che Python non mi piaccia ... In realtà penso che Python sia lo strumento perfetto per il lavoro, non voglio esporlo all'utente (mi piacerebbe lo stesso anche se fosse scritto in Java, Perl, Ruby o qualsiasi altra cosa).

Quindi vorrei chiedere approfondimenti su quale sarebbe, secondo te, il modo migliore per esporre i segnaposto per gli utenti:

  1. Quale pensi sia il miglior formato segnaposto (pensa come $ {var}, $ (var) o # {var})?

  2. Quale sarebbe il modo migliore per sostituire quei segnaposto?

Ho pensato di usare un'espressione regolare per cambiare - per esempio - $ {var} in% (var) s e quindi applicare la normale sostituzione del modello Python, ma non sono sicuro che sia l'approccio migliore.

Se vai in quel modo, sarebbe molto bello se potessi indicarmi qual è anche una bozza di quell'espressione regolare.

Grazie!

Aggiornamento : un utente ha sottolineato l'utilizzo di sistemi di templating completi, ma penso che potrebbe non valerne la pena, dal momento che tutto ciò di cui ho bisogno è la sostituzione dei segnaposto: non avrò loop o simili che.

Aggiornamento finale : al momento ho scelto di non utilizzare alcun motore di template. Ho scelto di utilizzare l'approccio string.template più semplice (come sottolineato in un commento di hyperboreean ). La verità è che non mi piace scegliere una soluzione perché in futuro potrebbe esserci una necessità. Terrò tutti questi suggerimenti sulla mia manica e se durante la vita dell'applicazione c'è una chiara necessità di una o più funzionalità offerte da loro, rivisiterò l'idea. In questo momento, penso davvero che sia eccessivo. Avere modelli completi che l'utente finale può modificare come vuole è, almeno dal mio punto di vista, più problemi che benefici. Tuttavia, è molto più bello essere consapevoli dei motivi per cui non ho seguito quella strada, piuttosto che non cercare nulla e sceglierlo.

Grazie mille per tutti gli input.

È stato utile?

Soluzione

Utilizza uno strumento modello reale: mako o jinja . Non rotolare il tuo. Non ne vale la pena.

Altri suggerimenti

Avere un sistema di template leggero ... Non sono sicuro che tu possa usare alcuni di quelli forniti da TurboGears (Kid o Genshi)

Consiglierei jinja2 .

Non dovrebbe creare problemi di prestazioni di runtime poiché compila i modelli in Python. Offrirà una flessibilità molto maggiore. Per quanto riguarda manutenibilità ; dipende molto dal programmatore, ma teoricamente (e certamente superficialmente) non riesco a capire perché dovrebbe essere più difficile da mantenere.

Con un po 'più di lavoro puoi dare al tuo utente esperto di tecnologia la possibilità di definire lei stesso lo stile di sostituzione. Oppure scegline uno tra quelli predefiniti da te forniti.

Potresti provare il nuovo metodo str.format () di Python 2.6 / 3.0: http://docs.python.org/library/string.html#formatstrings

Sembra un po 'diverso dalla formattazione% e potrebbe non essere immediatamente riconoscibile come Python:

'fish{chips}'.format(chips= 'x')
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top