jinja2 Custom filter“TemplateAssertionError:no filter named'format_number'” [英] jinja2 Custom filter "TemplateAssertionError: no filter named 'format_number'"

查看:521
本文介绍了jinja2 Custom filter“TemplateAssertionError:no filter named'format_number'”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当尝试通过更新环境中的过滤器字典来在模板环境中注册自定义过滤器时,出现 TemplateAssertionError:没有名为format_number的过滤器错误。



在我的模块中,我已经导入了环境模块,如下所示:

  from jinja2导入环境

在我的类中,我定义了以下方法:

  class DashboardHandler(SecurePageHandler):
$ b $ def format_number(number):
s ='%d'%number
groups = []
而s和s [-1] .isdigit():
groups.append(s [-3:])
s = s [: - 3]
(self):
... ... snip ...
env = environment.Environment( self)
env.filters ['format_number'] = self.format_number
#... snip ...

在我的html模板文件中,我尝试按如下方式实现过滤器:

  {{top_five_url .total | format_number}} 

这是怎么发生的?

更新

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

已解决

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

$ $ p $ code $ import $ $
$ b $格式编号
s = %d $%$
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


解决方案

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

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

  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


I'm getting the "TemplateAssertionError: no filter named 'format_number'" error, when trying to register a custom filter on the template environment by updating the filters dict on the environment.

In my module, I have imported environment module as follows:

from jinja2 import environment 

In my class I defined the following method:

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 ...

Inside my html template file I tried to implement the filter as follows:

{{top_five_url .total|format_number}}

How is this happening?

Update

Is there a default environment instance, we should use?

Resolved

Inside the module, I defined my method and updated the filters dictionary globally as follows:

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

解决方案

I could resolve my problem as follow,

Inside the module, I defined my method and updated the filters dictionary globally as follows:

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

这篇关于jinja2 Custom filter“TemplateAssertionError:no filter named'format_number'”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆