这是我最后用的。关键是不使用默认变量
${val}
使用普通的Python f字符串。
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中的最小和最大日期。