jinja2 Пользовательский фильтр "TemplateAssertionError: нет фильтра с именем 'format_number'" - PullRequest
6 голосов
/ 01 декабря 2011

Я получаю сообщение об ошибке " TemplateAssertionError: нет фильтра с именем 'format_number' " при попытке зарегистрировать пользовательский фильтр в среде шаблона путем обновления dict фильтров в среде.

В моем модуле я импортировал модуль среды следующим образом:

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

Как это происходит?

Есть ли экземпляр среды по умолчанию, который мы должны использовать?

1 Ответ

9 голосов
/ 15 марта 2012

Я мог бы решить мою проблему следующим образом,

Внутри модуля я определил свой метод и глобально обновил словарь фильтров следующим образом:

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