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