Vous devriez pouvoir personnaliser TemplateLookup pour obtenir le comportement souhaité.
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>
J'ai finalement tenté de mettre en œuvre cette place du hack que j'utilisais, et j'ai rencontré un problème. Cela modifie le préprocesseur pour l'ensemble de la recherche, ce qui affecte tous les modèles dans la chaîne d'héritage. Dans mon cas, je transige lentement les modèles dans HAML, et donc la plupart de la chaîne n'est pas valide HAML. –
Dans mes deux derniers exemples, le préprocesseur haml n'est utilisé que lorsque le modèle a l'extension '.haml', vous devriez pouvoir mélanger les modèles haml/html. – zeekay
Les recherches de modèles en raison de l'héritage ou les balises <%include /> utilisent n'importe quel Lookup chargé le premier modèle. Si je 'get_template (" quelquechose.haml ")' et puis hérite de quelque chose qui n'est pas HAML, il échouera. –