आपको इच्छित व्यवहार प्राप्त करने के लिए टेम्पलेट लुकअप को अनुकूलित करने में सक्षम होना चाहिए।
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' एक्सटेंशन होता है, तो आप हैमल/एचटीएमएल टेम्पलेट्स को मिश्रित करने में सक्षम होना चाहिए। – zeekay
विरासत के कारण टेम्पलेट लुकअप या <%include /> टैग जो भी लुकअप पहले टेम्पलेट को लोड करता है उसका उपयोग करते हैं। अगर मैं get_template ("something.haml") 'और फिर कुछ ऐसा प्राप्त करता हूं जो HAML नहीं है, तो यह असफल हो जाएगा। –