2011-02-23 7 views
5

Django प्रलेखन के अनुसार मैं अपने फिल्टर पंजीकृत कर लिया है:मैं Google App Engine टेम्पलेट सिस्टम में कस्टम फ़िल्टर कैसे पंजीकृत करूं?

from google.appengine.ext.webapp import template 
# ... 
register = template.create_template_register() 
@register.filter(name='wld') 
def wld(result): 
    if result == 1 : return "win" 
    if result == 0 : return "loss" 
    if result == 0.5 : return "draw" 
    return "unknown" 
self.response.out.write(template.render("player.html", template_values)) 

टेम्पलेट में कहीं मैं कोड है:
{{result|wld}}

और जब मैं अपने टेम्पलेट रेंडर करने के लिए प्रयास करते हैं, मैं त्रुटि मिलती है: TemplateSyntaxError: Invalid filter: 'wld'

मैं क्या गलत कर रहा हूं?

उत्तर

12

बार जब आप अपने कस्टम टैग पुस्तकालय बना लेते हैं तो Django टेम्पलेट इंजन के साथ इसे रजिस्टर करने की आवश्यकता:

from google.appengine.ext.webapp import template 
template.register_template_library('path.to.lib') 

ध्यान दें कि कॉल template.register_template_library एक आवरण है कि AppEngine SDK का एक भाग के रूप में प्रदान की जाती है। एक बार जब आप इसे अपने main.py में डाल देते हैं, तो नए टैग या फ़िल्टर बिना किसी काम के आपके सभी टेम्पलेट्स में उपलब्ध हो सकते हैं। {% load %} टैग का उपयोग करने की आवश्यकता नहीं है।

एक महत्वपूर्ण नोट: register_template_library की कार्यप्रणाली आपके एपइंजिन एप्लिकेशन में उपयोग किए जा रहे Django के किस संस्करण के आधार पर अलग-अलग होगी। यदि आप 0.96 का उपयोग कर रहे हैं, तो पैरामीटर कस्टम टैग लाइब्रेरी फ़ाइल का मार्ग होगा। यदि आप Django 1.2 का उपयोग कर रहे हैं, तो यह कस्टम टैग लाइब्रेरी के लिए एक पायथन मॉड्यूल पथ से होगा। मैंने यह काम in a post on my blog बनाने के लिए निर्देश पोस्ट किए हैं।

+1

धन्यवाद! एक बार जब मैंने निर्देशिका 'टैग' बनाई, वहां '__init __। Py' और 'mytags.py' को खाली किया गया, जिसमें फ़िल्टर पंजीकरण शामिल है और '.py.register_template_library (' tag.mytags ') को main.py से कहा जाता है, सबकुछ ठीक काम करता है! – rmflow

+0

उत्कृष्ट। इसे सुनकर बहुत खुशी हुई। –

+1

'{% load%} 'टैग का उपयोग करने की आवश्यकता नहीं है मेरे लिए चारों ओर घूमने के एक घंटे की कुंजी थी! –

0

आपको इस फ़िल्टर का उपयोग करने के लिए हर टेम्पलेट में {% load the_name_of_that_module %} ब्लॉक जोड़ने की आवश्यकता है।

+0

स्पष्ट रूप से मुझे कुछ याद आ रही है, मेरे पास केवल main.py स्क्रिप्ट और player.html टेम्पलेट है। उपरोक्त कोड main.py में निष्पादित किया गया है। कैसे 'लोड' टैग दिखना चाहिए? – rmflow

+0

जीएई डिफ़ॉल्ट रूप से Django templating सिस्टम का उपयोग करता है और इस प्रकार [उसी नियम] (http://docs.djangoproject.com/en/1.2/howto/custom-template-tags/) का पालन करता है। असल में 'लोड' टैग एक अंतर्निहित टैग है, लेकिन आपको अपने कस्टम पैकेज/टैग को अपने प्रोजेक्ट पैकेज में किसी विशेष स्थान पर रखना होगा। मैं दृढ़ता से दस्तावेज के टुकड़े को पढ़ने की सलाह देता हूं, क्योंकि यह पूरी तरह से विषय को समझाता है। –