如何在Jinja2中设置日期格式?

2024-06-26 01:35:17 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Jinja2,如何格式化日期字段?我知道在Python中,我可以简单地执行以下操作:

print(car.date_of_manufacture.strftime('%Y-%m-%d'))

但如何在Jinja2中设置日期格式?


Tags: ofjinja2date格式carprintstrftimemanufacture
2条回答

这是我在Jinja2和Flask用过的过滤器

@app.template_filter('strftime')
def _jinja2_filter_datetime(date, fmt=None):
    date = dateutil.parser.parse(date)
    native = date.replace(tzinfo=None)
    format='%b %d, %Y'
    return native.strftime(format) 

然后像这样使用过滤器:

{{car.date_of_manufacture|strftime}}

有两种方法。直接的方法是简单地调用(并打印)模板中的strftime()方法,例如

{{ car.date_of_manufacture.strftime('%Y-%m-%d') }}

另一个更好的方法是定义自己的过滤器,例如:

from flask import Flask
import babel

app = Flask(__name__)

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.dates.format_datetime(value, format)

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

(这个过滤器基于关于i18n的原因基于babel,但是您也可以使用strftime)。过滤器的优点是,您可以编写

{{ car.date_of_manufacture|datetime }}
{{ car.date_of_manufacture|datetime('full') }}

它看起来更好,更易于维护。另一个常见的过滤器也是“timedelta”过滤器,其计算结果类似于“8分钟前编写的”。您可以为此使用babel.dates.format_timedelta,并将其注册为类似于此处给出的datetime示例的筛选器。

我想你得自己写过滤器。它实际上是文档中自定义过滤器的示例:http://jinja.pocoo.org/docs/api/#custom-filters

相关问题 更多 >