2011-11-28 10 views
6

Me gustaría de alguna manera instrumentar un mako.lookup.TemplateLookup de manera que aplique ciertos preprocesadores solo para ciertas extensiones de archivo.Elija el preprocesador Mako basado en la extensión de archivo?

Específicamente, tengo un haml.preprocessor que me gustaría aplicar a todas las plantillas cuyo nombre de archivo termine en .haml.

Gracias!

Respuesta

4

Debería poder personalizar TemplateLookup para obtener el comportamiento que desea.

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

fin he intentado poner en práctica este lugar del truco que estaba usando, y me tocó un problema. Esto cambia el preprocesador para toda la búsqueda, lo que afecta a todas las plantillas en la cadena de herencia. En mi caso, estoy haciendo una transición lenta de las plantillas a HAML, por lo que la mayoría de la cadena no es válida HAML. –

+0

En mis dos últimos ejemplos, el preprocesador de haml solo se usa cuando la plantilla tiene la extensión '.haml', usted debería poder mezclar las plantillas de haml/html. – zeekay

+0

Las búsquedas de plantillas debido a herencia o las etiquetas <%include /> usan cualquiera que Lookup cargue la primera plantilla. Si 'get_template (' something.haml ') 'y luego heredo de algo que no es HAML, fallará. –

Cuestiones relacionadas