Как использовать фильтр Jinja в приложении Flask?

Я пытаюсь следовать этому решению, чтобы создать фильтр даты и времени для моих значений даты внутри шаблона. Преимуществом использования babel будет i18n.

Я вставил код в файл с именем filter.py в своем пакете приложения:

from f11_app import app
import babel

def format_datetime(value, format='medium'):
    if format == 'full':
        format="EEEE, d. MMMM y 'at' HH:mm"
    elif format == 'medium':
        format="EE dd.MM.y HH:mm"
    return babel.format_datetime(value, format)

app.jinja_env.filters['datetime'] = format_datetime  

Теперь ошибка, которую я получаю:

File "/home/kave/projects/F11/Engineering/f11_app/templates/show_records.html", line 19, in block "body"

<td>{{ record.record_date|datetime }}

File "/home/kave/projects/F11/Engineering/f11_app/filters.py", line 9, in format_datetime

AttributeError: 'module' object has no attribute 'format_datetime'

Чтобы загрузить filter.py, последняя строка моего f11_app __init__.py такова:

from f11_app import views, filters

Что я могу упустить, пожалуйста?


person Houman    schedule 09.06.2013    source источник


Ответы (1)


Это потому, что в модуле babel не было метода format_datetime. Вы должны использовать babel.dates.format_datetime или flask.ext.babel.format_datetime. См.: http://babel.edgewall.org/wiki/Documentation/0.9/dates.html и http://pythonhosted.org/Flask-Babel/#formatting-dates.

Вы также можете добавить фильтр с декоратором:

@app.template_filter('datetime')
def format_datetime(value, format='medium'):
    if format == 'full':
        format="EEEE, d. MMMM y 'at' HH:mm"
    elif format == 'medium':
        format="EE dd.MM.y HH:mm"
    return babel.format_datetime(value, format)
person tbicr    schedule 10.06.2013
comment
Да, я использовал неправильное пространство имен import babel вместо 'from babel.dates import format_date' большое спасибо - person Houman; 10.06.2013