2011-12-01 34 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 ... 

在我的HTML模板文件我试图实现滤波器如下:

{{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 
相关问题