2011-12-01 13 views
6

मैं हो रही है "TemplateAssertionError: कोई फिल्टर 'format_number' नाम" त्रुटि, जब टेम्पलेट पर्यावरण पर कोई कस्टम फ़िल्टर रजिस्टर करने के लिए कोशिश कर रहा है फिल्टर को अपडेट करके पर्यावरण पर निर्देश।jinja2 कस्टम फ़िल्टर "TemplateAssertionError: कोई भी फ़िल्टर नाम 'format_number'"

मेरी मॉड्यूल में, मैं पर्यावरण मॉड्यूल के रूप में इस आयात किया है:

from jinja2 import environment 

मेरी कक्षा में मैं परिभाषित निम्न विधि:

class DashboardHandler(SecurePageHandler): 

    def format_number(number): 
     s = '%d' % number 
     groups = [] 
     while s and s[-1].isdigit(): 
      groups.append(s[-3:]) 
      s = s[:-3] 
     return s + ','.join(reversed(groups)) 

    def do_get(self): 
      # ... snip ... 
      env = environment.Environment(self) 
      env.filters['format_number'] = self.format_number 
      # ... snip ... 

मेरी एचटीएमएल टेम्पलेट फ़ाइल के अंदर मैं फिल्टर लागू करने की कोशिश की निम्नानुसार है:

{{top_five_url .total|format_number}} 

यह कैसे हो रहा है?

अद्यतन

वहाँ एक डिफ़ॉल्ट वातावरण उदाहरण है, हम इस्तेमाल करना चाहिए?

हल मॉड्यूल के अंदर, मैं अपने विधि परिभाषित और अद्यतन फिल्टर विश्व स्तर पर शब्दकोश इस प्रकार है:

import jinja2 

def format_number(number): 
    s = '%d' % number 
    groups = [] 
    while s and s[-1].isdigit(): 
     groups.append(s[-3:]) 
     s = s[:-3] 
    return s + ','.join(reversed(groups)) 

jinja2.filters.FILTERS['format_number'] = format_number 

उत्तर

7

मैं अपने समस्या को हल कर सकता है का पालन के रूप में,

मॉड्यूल के अंदर , मैंने अपनी विधि को परिभाषित किया और निम्नानुसार फ़िल्टर शब्दकोश को अद्यतन किया:

import jinja2 

def format_number(number): 
    s = '%d' % number 
    groups = [] 
    while s and s[-1].isdigit(): 
     groups.append(s[-3:]) 
     s = s[:-3] 
    return s + ','.join(reversed(groups)) 

jinja2.filters.FILTERS['format_number'] = format_number 
संबंधित मुद्दे