jinja2自定义过滤器“TemplateAssertionError:没有名为'format_number'的过滤器”

时间:2011-12-01 10:34:36

标签: python filter environment jinja2

当我尝试通过更新环境中的过滤器dict在模板环境中注册自定义过滤器时,我收到了“ 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}}

这是怎么回事?

是否有默认环境实例,我们应该使用?

1 个答案:

答案 0 :(得分:9)

我可以按照以下方式解决我的问题,

在模块内部,我定义了我的方法并全局更新了过滤器字典,如下所示:

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