jinja2自定义过滤器“TemplateAssertionError: 没有名为'format_number'的过滤器”
我在尝试通过更新环境中的过滤器字典来注册一个自定义过滤器时,遇到了“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