2011-11-28 62 views
6

我想以某種方式來測試mako.lookup.TemplateLookup,以便它僅對某些文件擴展名應用某些預處理程序。根據文件擴展名選擇Mako預處理器?

具體來說,我有一個haml.preprocessor,我想申請所有模板的文件名以.haml結尾。

謝謝!

回答

4

你應該能夠自定義TemplateLookup來獲得你想要的行爲。

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

我終於嘗試實現這個代替我正在使用的黑客攻擊,並且我遇到了問題。這會更改整個查找的預處理器,這會影響繼承鏈中的所有模板。就我而言,我正在慢慢將模板轉換爲HAML,因此大部分鏈都不是有效的HAML。 –

+0

在我的最後兩個例子中,haml預處理器僅在模板具有'.haml'擴展名時使用,您應該能夠混合使用haml/html模板。 – zeekay

+0

由於繼承或<%include />標籤使用查找加載第一個模板的任何模板查找。如果我'get_template(「something.haml」)'然後繼承不是HAML的東西,它會失敗。 –

相關問題