6
我想以某種方式來測試mako.lookup.TemplateLookup
,以便它僅對某些文件擴展名應用某些預處理程序。根據文件擴展名選擇Mako預處理器?
具體來說,我有一個haml.preprocessor
,我想申請所有模板的文件名以.haml
結尾。
謝謝!
我想以某種方式來測試mako.lookup.TemplateLookup
,以便它僅對某些文件擴展名應用某些預處理程序。根據文件擴展名選擇Mako預處理器?
具體來說,我有一個haml.preprocessor
,我想申請所有模板的文件名以.haml
結尾。
謝謝!
你應該能夠自定義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。 –
在我的最後兩個例子中,haml預處理器僅在模板具有'.haml'擴展名時使用,您應該能夠混合使用haml/html模板。 – zeekay
由於繼承或<%include />標籤使用查找加載第一個模板的任何模板查找。如果我'get_template(「something.haml」)'然後繼承不是HAML的東西,它會失敗。 –