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

8 投票
1 回答
20382 浏览
提问于 2025-04-17 07:27

我在尝试通过更新环境中的过滤器字典来注册一个自定义过滤器时,遇到了“TemplateAssertionError: no filter named '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 个回答

15

我可以这样解决我的问题,

在这个模块里,我定义了我的方法,并且全局更新了过滤器字典,具体做法如下:

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

撰写回答