2011-11-28 18 views

risposta

4

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

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

+0

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

+0

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