2011-11-28 12 views

答えて

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

私の最後の2つの例では、hamlプリプロセッサはテンプレートに '.haml'拡張がある場合にのみ使用され、haml/htmlテンプレートを混ぜることができます。 – zeekay

+0

継承または<%include />タグによるテンプレート検索では、最初のテンプレートを読み込んだ参照を使用します。私が 'get_template(" something.haml ")'を実行し、次にHAMLでないものから継承すると失敗します。 –

関連する問題