Bạn sẽ có thể tùy chỉnh TemplateLookup để có được hành vi bạn muốn.
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>
tôi cuối cùng đã cố gắng thực hiện điều này thay vì của hack mà tôi đang sử dụng và tôi đã gặp phải sự cố. Điều này thay đổi tiền xử lý cho toàn bộ tra cứu, ảnh hưởng đến tất cả các mẫu trong chuỗi kế thừa. Trong trường hợp của tôi, tôi đang dần chuyển đổi các khuôn mẫu thành HAML, và vì vậy hầu hết các chuỗi không phải là HAML hợp lệ. –
Trong hai ví dụ cuối cùng của tôi, bộ tiền xử lý haml chỉ được sử dụng khi mẫu có phần mở rộng '.haml', bạn có thể trộn các mẫu haml/html. – zeekay
Tra cứu mẫu do kế thừa hoặc <%include /> thẻ sử dụng bất kỳ tra cứu nào đã tải mẫu đầu tiên. Nếu tôi 'get_template (" something.haml ")' và sau đó kế thừa từ cái gì đó không phải là HAML, nó sẽ thất bại. –