2012-05-17 12 views
5

के तहत jinja2 पर एक कस्टम फ़िल्टर जोड़ना इस प्रश्न को before से पूछा गया है लेकिन स्वीकृत समाधान (प्रश्न पोस्टर स्वयं द्वारा दिया गया) कहता है कि हम jinja2.filter.FILTER को नया फ़िल्टर जोड़ सकते हैं।पिरामिड

लेकिन jinja2 documentation में, यह सलाह दी जाती है कि फिल्टर पर्यावरण के लिए जोड़ा जा।

मैं पिरामिड के अंतर्गत कोई ऐप्स के विकास कर रहा हूँ और अपने कस्टम फिल्टर को परिभाषित करने और निम्नलिखित करने की ज़रूरत है।

from jinja2 import Environment 

#Define a new filter 
def GetBitValue(num,place): 
    y = (num >> (place-1)) & 1 
    return y 

env = Environment() 
env.filters['getbitvalue'] = GetBitValue 

यह कोड खंड कहाँ रखा जाना चाहिए?

मैं विचारों फ़ाइल में रखने की कोशिश की, लेकिन वह स्पष्ट रूप से काम नहीं किया।

तो मैं __init__.py में रखें, कैसे मुझे यकीन है कि jinja2 यह उठाता अप कर सकता हूँ? मेरा मतलब है कि कैसे मैं पिरामिड के नीचे jinja2 सेटिंग के env वापस भेज सकता हूँ?

+0

आपको एक नया वातावरण नहीं बनाना चाहिए बल्कि एक पिरामिड उपयोगों का उपयोग नहीं करना चाहिए। – ThiefMaster

+0

मैं यह कैसे कर सकता हूं? – RedBaron

+0

जो मैंने पिरामिड डॉक्स जिन्जा में पढ़ा है, उससे मूल रूप से समर्थित नहीं है, इसलिए कृपया कोड पोस्ट करें कि आप पिरामिड में एक रेंडरर के रूप में जिन्जा को कैसे पंजीकृत कर रहे हैं। – ThiefMaster

उत्तर

11

मान लिया जाये कि आप pyramid_jinja2 उपयोग कर रहे हैं, तो आप पर्यावरण का उपयोग करने की configurator उदाहरण के माध्यम से pyramid_jinja2.get_jinja2_environment() उपयोग कर सकते हैं।

हालांकि, जाहिरा तौर पर आप भी register them via the pyramid config file env सीधे तक पहुँचने के बिना कर सकते हैं:

[app:yourapp] 
    # ... other stuff ... 
    jinja2.filters = 
     # ... 
     getbitvalue = your_package.your_subpackage:GetBitValue 
+2

और क्या अगर मैं config में निर्दिष्ट करने के लिए चाहते है? यह वास्तव में एक विन्यास बात नहीं है, है ना? इसे कोड के अंदर तारित किया जाना चाहिए। कॉन्फ़िगर movable बिट्स के लिए है, जो dev/prod चरणों के लिए अलग होगा। –

+0

कुछ जोड़: config.include ('pyramid_jinja2') config.commit() # आप यहां jinjaEnv = config.get_jinja2_environment() – tariqdaouda

5

पूर्णता के लिए यह होगा कि कैसे आप कोड में फिल्टर रजिस्टर।

# __init__.py 
def main(global_config, **settings): 
    #.... 
    config = Configurator(settings=settings) 
    config.include('pyramid_jinja2') 
    config.commit() # this is needed or you will get None back on the next line 
    jinja2_env = config.get_jinja2_environment() 
    jinja2_env.filters['getbitvalue'] = GetBitValue 
+0

यह एक महान है! – juliusmh