2011-11-28 1 views

Répondre

4

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

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

+0

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

+0

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

Questions connexes