【问题标题】:How to use Jinja filter within a Flask application?如何在 Flask 应用程序中使用 Jinja 过滤器?
【发布时间】:2013-06-09 22:38:53
【问题描述】:

我正在尝试关注这个solution,以便在模板中为我的日期值创建一个日期时间过滤器。使用 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'

为了加载filters.py,我f11_app__init__.py的最后一行是这样的:

from f11_app import views, filters

请问我会遗漏什么?

【问题讨论】:

    标签: flask jinja2


    【解决方案1】:

    这是因为 babel 模块没有 format_datetime 方法。您必须使用babel.dates.format_datetimeflask.ext.babel.format_datetime。请参阅:http://babel.edgewall.org/wiki/Documentation/0.9/dates.htmlhttp://pythonhosted.org/Flask-Babel/#formatting-dates

    您也可以添加过滤器with decorator:

    @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)
    

    【讨论】:

    • 是的,我使用了错误的命名空间 import babel 而不是 'from babel.dates import format_date' 非常感谢
    猜你喜欢
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 2022-07-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 2015-07-26
    相关资源
    最近更新 更多