2011-12-01 38 views
6

當我嘗試通過更新過濾器在模板環境中註冊自定義過濾器時,出現「TemplateAssertionError:沒有過濾器名爲'format_number'」錯誤關於環境的字典。jinja2自定義過濾器「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}} 

這是怎麼發生的?

更新

是否有一個默認的環境來說,我們應該使用?

解決

在模塊內部,我定義我的方法,並更新了過濾器全球字典如下:

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 

回答

7

我能解決我的問題如下,

模塊內部,我定義了我的方法並全局更新了過濾器字典,如下所示:

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 
相關問題