我正在尝试关注此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
的{{1}}的最后一行是:
__init__.py
请问我有什么遗漏?
答案 0 :(得分:8)
这是因为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。
您还可以添加过滤器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)