Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Choose Mako preprocessor based on file extension?

I would like to somehow instrument a mako.lookup.TemplateLookup such that it applies certain preprocessors only for certain file extensions.

Specifically, I have a haml.preprocessor that I would like to apply to all templates whose file name ends with .haml.

Thanks!

like image 900
Mike Boers Avatar asked Nov 28 '11 18:11

Mike Boers


1 Answers

You should be able to customize TemplateLookup to get the behavior you want.

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>
like image 106
zeekay Avatar answered Sep 25 '22 17:09

zeekay