Dovresti essere in grado di personalizzare TemplateLookup per ottenere il comportamento desiderato.
customlookup.py
from mako.lookup import TemplateLookup
import haml
class Lookup(TemplateLookup):
def get_template(self, uri):
if uri.rsplit('.')[1] == 'haml':
# change preprocessor used for this template
default = self.template_args['preprocessor']
self.template_args['preprocessor'] = haml.preprocessor
template = super(Lookup, self).get_template(uri)
# change it back
self.template_args['preprocessor'] = default
else:
template = super(Lookup, self).get_template(uri)
return template
lookup = Lookup(['.'])
print lookup.get_template('index.haml').render()
index.haml
<%inherit file="base.html"/>
<%block name="content">
%h1 Hello
</%block>
base.html
<html>
<body>
<%block name="content"/>
</body>
</html>
ho finalmente cercato di attuare questa invece dell'hack che stavo usando, e ho riscontrato un problema. Ciò cambia il preprocessore per l'intera ricerca, che riguarda tutti i modelli nella catena di ereditarietà. Nel mio caso, sto lentamente spostando i modelli in HAML, quindi la maggior parte della catena non è HAML valida. –
Nei miei ultimi due esempi il preprocessore haml viene usato solo quando il modello ha l'estensione '.haml', dovresti essere in grado di mescolare i template haml/html. – zeekay
Le ricerche dei modelli a causa dell'ereditarietà o dei tag <%include /> utilizzano qualsiasi Look caricato il primo modello. Se ho 'get_template (" something.haml ")' e poi eredito da qualcosa che non è HAML, fallirà. –