【问题标题】:jinja2 Custom filter "TemplateAssertionError: no filter named 'format_number'"jinja2 自定义过滤器“TemplateAssertionError:没有过滤器名为'format_number'”
【发布时间】:2012-01-10 12:18:13
【问题描述】:

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

这是怎么回事?

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

【问题讨论】:

    标签: python filter environment jinja2


    【解决方案1】:

    我可以通过以下方式解决我的问题,

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

    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
    

    【讨论】:

      猜你喜欢
      • 2015-03-21
      • 2021-02-24
      • 1970-01-01
      • 2012-06-07
      • 1970-01-01
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      相关资源
      最近更新 更多