6
私は何らかの形で、特定のファイル拡張子に対してのみ特定のプリプロセッサを適用するようにmako.lookup.TemplateLookup
を計測したいと考えています。ファイル拡張子に基づいてMakoプリプロセッサを選択しますか?
具体的には、.haml
で終わるすべてのテンプレートに適用したいhaml.preprocessor
があります。
ありがとうございます!
私は何らかの形で、特定のファイル拡張子に対してのみ特定のプリプロセッサを適用するようにmako.lookup.TemplateLookup
を計測したいと考えています。ファイル拡張子に基づいてMakoプリプロセッサを選択しますか?
具体的には、.haml
で終わるすべてのテンプレートに適用したいhaml.preprocessor
があります。
ありがとうございます!
必要な動作を得るには、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>
私は最終的に代わりにこれを実装しようとしてきました私が使用していたハックの問題が発生しました。これにより、ルックアップ全体のプリプロセッサが変更され、継承チェーン内のすべてのテンプレートに影響します。私の場合は、テンプレートをHAMLにゆっくりと移行しているので、チェーンのほとんどは有効なHAMLではありません。 –
私の最後の2つの例では、hamlプリプロセッサはテンプレートに '.haml'拡張がある場合にのみ使用され、haml/htmlテンプレートを混ぜることができます。 – zeekay
継承または<%include />タグによるテンプレート検索では、最初のテンプレートを読み込んだ参照を使用します。私が 'get_template(" something.haml ")'を実行し、次にHAMLでないものから継承すると失敗します。 –