跳转到主要内容

向Jinja添加`parse_date`和`format_date`过滤器。

项目描述

Jinja2-ISO8601

向Jinja添加parse_dateformat_date过滤器。由于iso8601模块处理日期解析,因此该项目命名为Jinja2-ISO8601。.strftime()方法处理日期格式化。

安装

首先安装Python模块

pip install jinja2-iso8601

然后将扩展添加到您的Jinja环境中

from jinja2 import Environment

jinja_env = Environment(extensions=['jinja2_iso8601.ISO8601Extension'])

使用

现在您可以在编写Jinja模板时使用两个新的过滤器:parse_dateformat_dateparse_date将ISO-8601格式的字符串转换为Python datetime对象。format_date将对传入的任何内容调用.strftime()方法;这适用于datetimedatetime对象。您需要为format_date过滤器提供格式字符串;请查阅Python文档了解如何编写格式字符串

例如,假设您有一个名为datestr的变量,它表示一个有效的ISO-8601格式的日期时间字符串,例如"2022-09-19T14:38:34.213001"。您可以将Jinja模板编写如下

no filter: {{ datestr }}
parsed: {{ datestr|parse_date }}
formatted: {{ datestr|parse_date|format_date("%a, %b %d %Y") }}

渲染后的结果将是

no filter: 2022-09-19T14:38:34.213001
parsed: 2022-09-19 14:38:34.213001
formatted: Mon, Sep 19 2022

时区

在Python中,日期和时间对象可能包含时区信息。具有相关时区的日期和时间对象是“有意识的”,而没有相关时区的日期和时间对象是“无意识的”。

默认情况下,解析没有时区信息的ISO-8601字符串时,结果是“无意识”的日期时间对象。但是,在某些情况下,您可能希望假设默认时区,以便即使没有指定时区,也始终得到“有意识”的日期时间对象。例如,如果您知道ISO-8601字符串位于UTC时区,则您可能希望parse_date过滤器返回具有UTC时区的“有意识”日期时间。

在 Jinja 环境中,default_timezone 的值控制在没有指定字符串的情况下使用哪个时区。默认情况下,此值为 None,这使得 parse_date 返回一个“无知的” datetime。以下是使所有 datetime 解析为 UTC 的方法

from datetime import timezone
from jinja2 import Environment

jinja_env = Environment(extensions=['jinja2_iso8601.ISO8601Extension'])
jinja_env.default_timezone = timezone.utc

相关链接

这些过滤器可以与处理 datetime 的其他 Jinja 过滤器配对,例如 jinja2_humanize_extension。您可以使用此项目的 parse_date 过滤器将字符串解析为 datetime,然后使用 jinja2_humanize_extensionhumanize_naturalday 过滤器对 datetime 进行“人性化”。它们协同工作得非常好!

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

jinja2_iso8601-1.0.0.tar.gz (3.0 kB 查看哈希值)

上传时间 源代码

构建分发

jinja2_iso8601-1.0.0-py2.py3-none-any.whl (2.7 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面