在 Django 中,我正在验证日期:
from datetime import date
from django.utils.translation import ugettext_lazy as _
from django.core.exceptions import ValidationError
if start_date < date.today():
raise ValidationError(
_('%(start_date)s must be on or after today.'),
params={'start_date': start_date},
)
其中 start_date
是一个 datetime
实例。
为了很好地格式化日期,我需要写什么来代替 s
中的 %(start_date)s
;最好是 dd-mmm-yyyy?
答案 0 :(得分:1)
您可以使用 strftime(...)
方法作为,
def validate_date(start_date):
if start_date < date.today():
raise ValidationError(
_('%(start_date)s must be on or after today.'),
params={'start_date': start_date.strftime("%d-%b-%Y")},
)
return start_date
你会得到异常,
<块引用>django.core.exceptions.ValidationError: ['01-Jan-2020 必须在今天或之后。']
您可以在此处查看 strftime(...)
方法支持的完整格式代码集,strftime()
and strptime()
Format Codes
您可以使用 str.format()
方法,
def validate_date(start_date):
if start_date < date.today():
raise ValidationError(
_("{:%d-%b-%Y} must be on or after today.".format(start_date))
)
return start_date
正如@Justin Ezequiel 在他的 comment 中提到的,您可以使用 f-string 作为
def validate_date(start_date):
if start_date < date.today():
raise ValidationError(
_(f"{start_date:%d-%b-%Y} must be on or after today.")
)
return start_date