2011-11-28 10 views
6

मैं किसी भी तरह से mako.lookup.TemplateLookup का उपयोग करना चाहता हूं जैसे कि यह केवल कुछ फ़ाइल एक्सटेंशन के लिए कुछ प्रीप्रोसेसरों को लागू करता है।फ़ाइल एक्सटेंशन के आधार पर मको प्रीप्रोसेसर चुनें?

विशेष रूप से, मेरे पास haml.preprocessor है कि मैं उन सभी टेम्पलेट्स पर आवेदन करना चाहता हूं जिनके फ़ाइल का नाम .haml के साथ समाप्त होता है।

धन्यवाद!

उत्तर

4

आपको इच्छित व्यवहार प्राप्त करने के लिए टेम्पलेट लुकअप को अनुकूलित करने में सक्षम होना चाहिए।

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

मैं अंत में यह बजाय लागू करने का प्रयास किया हैक का उपयोग कर रहा था, और मैंने एक समस्या मारा। यह पूरे लुकअप के लिए प्रीप्रोसेसर को बदलता है, जो विरासत श्रृंखला में सभी टेम्पलेट को प्रभावित करता है। मेरे मामले में, मैं धीरे-धीरे टेम्पलेट को एचएएमएल में बदल रहा हूं, और इसलिए अधिकांश श्रृंखला वैध एचएएमएल नहीं है। –

+0

मेरे पिछले दो उदाहरणों में हैमल प्रीप्रोसेसर का उपयोग तब किया जाता है जब टेम्पलेट में '.haml' एक्सटेंशन होता है, तो आप हैमल/एचटीएमएल टेम्पलेट्स को मिश्रित करने में सक्षम होना चाहिए। – zeekay

+0

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

संबंधित मुद्दे