2011-12-01 13 views
6

Obtengo el "TemplateAssertionError: ningún filtro llamado 'formato_numero'" error al intentar registrar un filtro personalizado en el entorno de plantilla actualizando los filtros dict sobre el medio ambiente.jinja2 Filtro personalizado "TemplateAssertionError: no filter named 'format_number'"

En mi módulo, me han importado módulo de medio ambiente de la siguiente manera:

from jinja2 import environment 

En mi clase I define el siguiente método:

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 de mi archivo de plantilla HTML traté de aplicar el filtro de la siguiente manera:

{{top_five_url .total|format_number}} 

¿Cómo va esto?

actualización

¿Existe una instancia de entorno por defecto, debemos utilizar?

Resuelta

Dentro del módulo, he definido mi método y actualizan los filtros Diccionario globalmente como sigue:

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 

Respuesta

7

pude resolver mi problema, ya que sigue,

Dentro del módulo , Definí mi método y actualicé el diccionario de filtros de la siguiente manera:

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