2011-11-28 12 views

Odpowiedz

4

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> 
+0

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. –

+0

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

+0

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. –

Powiązane problemy