2011-12-01 15 views
6

Mi viene visualizzato il messaggio "TemplateAssertionError: nessun filtro denominato 'format_number'" errore, quando si tenta di registrare un filtro personalizzato nell'ambiente del modello aggiornando i filtri dettare sull'ambiente.jinja2 Filtro personalizzato "TemplateAssertionError: nessun filtro denominato 'format_number'"

Nel mio modulo, Ho importato modulo ambiente come segue:

from jinja2 import environment 

Nella mia classe ho definito il seguente metodo:

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 ... 

Dentro il mio file di modello HTML ho cercato di realizzare il filtro come segue:

{{top_five_url .total|format_number}} 

Come sta succedendo?

Aggiornamento

C'è un'istanza ambiente predefinito, dovremmo usare?

risolto

All'interno del modulo, ho definito il mio metodo e aggiornato il Dictionary Filtri a livello mondiale come segue:

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 

risposta

7

potrei risolvere il mio problema come seguire,

All'interno del modulo , Ho definito il mio metodo e aggiornato globalmente il dizionario dei filtri come segue:

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 
Problemi correlati