Powinieneś być w stanie dostosować TemplateLookup, aby uzyskać pożądane zachowanie.
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>
I wreszcie próbował zaimplementować to zamiast hack, którego używałem, i trafiłem na problem. To zmienia preprocesor dla całego wyszukiwania, które wpływa na wszystkie szablony w łańcuchu dziedziczenia. W moim przypadku powoli przenoszę szablony do HAML, a więc większość łańcucha nie jest poprawna HAML. –
W moich dwóch ostatnich przykładach preprocesor haml jest używany tylko wtedy, gdy szablon ma rozszerzenie '.haml', powinieneś móc mieszać szablony haml/html. – zeekay
Wyszukiwanie szablonów ze względu na dziedziczenie lub znaczniki <%include /> używają tego, co Lookup wczytał pierwszy szablon. Jeśli 'get_template (" something.haml ")', a następnie odziedziczę coś, co nie jest HAML, to się nie powiedzie. –