2011-11-28 30 views

Trả lời

4

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> 
+0

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ệ. –

+0

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

+0

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. –

Các vấn đề liên quan