2011-12-01 6 views
6

TemplateAssertionErrorを: 『format_number』という名前のフィルタなし」のエラー、テンプレートの環境上のカスタムフィルタを登録しようとした場合、フィルタを更新することによって、環境を考慮してください。次のように私のモジュールでJinja2のカスタムフィルタ「TemplateAssertionError:フィルタなしという名前の 『format_number』」私は取得しています

、私は環境モジュールをインポートしている:私のクラスで

from jinja2 import environment 

私は次のメソッド定義された:私は、フィルタを実装しようとした私のHTMLテンプレートファイル内

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

{{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 
関連する問題