如何在漏勺验证器中格式化日期?
How to format dates in colander validator?
用户 Pyramid、Colander 和 Deform,我有一个日期时间小部件。
datetime_event = colander.SchemaNode(
colander.DateTime(),
validator=colander.Range(
min=datetime(
2018, 1, 1, 0, 0,
tzinfo=timezone.utc),
min_err=(
'${val} must be after ${min}'),
max=datetime.now(timezone.utc),
max_err=(
'${val} is in the future, and must be less than ${max}')
),
)
我收到这条用户恶意验证错误消息。
2017-08-21 05:00:00-07:53 must be after 2018-01-01 00:00:00+00:00
我想格式化没有时区的日期:
2017-08-21 05:00:00 must be after 2018-01-01 00:00:00
或者更好:
21 Aug 2017 5:00 AM must be after 1 Jan 2018 12:00 AM
如果可能,我将如何格式化 min_err
和 max_err
中的日期时间对象?
这是我最终使用的。关键是不要使用默认变量 ${val}
并使用普通的旧 Python f-strings。
tz = self.tz
days_before = 28
dtmin = local_days_before(tz, days_before) # localized min date
dtmax = datetime.now(utc).astimezone(tz)
datetime_event = colander.SchemaNode(
colander.DateTime(default_tzinfo=dtmax.tzinfo),
widget=deform.widget.DateTimeInputWidget(
date_options={'min': -days_before,
'max': True,
'format': 'yyyy-mm-dd'},
time_options={'format': 'HH:i',
'formatLabel': 'HH:i'},
),
validator=colander.Range(
min=dtmin,
min_err=(f"Datetime must be after "
f"{dtmin:%B %d, %Y, %-I:%M %p} "),
max=dtmax,
max_err=(f"Datetime must be before "
f"{dtmax: %B %d, %Y, %-I:%M %p}")
),
title='Date and Time',
description='Date and time when the event occurred'
)
此解决方案还实现了日期和时间的格式化,以及 pickadate 中的最小和最大日期 UI。
用户 Pyramid、Colander 和 Deform,我有一个日期时间小部件。
datetime_event = colander.SchemaNode(
colander.DateTime(),
validator=colander.Range(
min=datetime(
2018, 1, 1, 0, 0,
tzinfo=timezone.utc),
min_err=(
'${val} must be after ${min}'),
max=datetime.now(timezone.utc),
max_err=(
'${val} is in the future, and must be less than ${max}')
),
)
我收到这条用户恶意验证错误消息。
2017-08-21 05:00:00-07:53 must be after 2018-01-01 00:00:00+00:00
我想格式化没有时区的日期:
2017-08-21 05:00:00 must be after 2018-01-01 00:00:00
或者更好:
21 Aug 2017 5:00 AM must be after 1 Jan 2018 12:00 AM
如果可能,我将如何格式化 min_err
和 max_err
中的日期时间对象?
这是我最终使用的。关键是不要使用默认变量 ${val}
并使用普通的旧 Python f-strings。
tz = self.tz
days_before = 28
dtmin = local_days_before(tz, days_before) # localized min date
dtmax = datetime.now(utc).astimezone(tz)
datetime_event = colander.SchemaNode(
colander.DateTime(default_tzinfo=dtmax.tzinfo),
widget=deform.widget.DateTimeInputWidget(
date_options={'min': -days_before,
'max': True,
'format': 'yyyy-mm-dd'},
time_options={'format': 'HH:i',
'formatLabel': 'HH:i'},
),
validator=colander.Range(
min=dtmin,
min_err=(f"Datetime must be after "
f"{dtmin:%B %d, %Y, %-I:%M %p} "),
max=dtmax,
max_err=(f"Datetime must be before "
f"{dtmax: %B %d, %Y, %-I:%M %p}")
),
title='Date and Time',
description='Date and time when the event occurred'
)
此解决方案还实现了日期和时间的格式化,以及 pickadate 中的最小和最大日期 UI。