返回django验证时如何格式化(简洁)日期?

时间:2021-05-19 15:29:12

标签: python django

在 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?

1 个答案:

答案 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


更新 1

您可以使用 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

更新 2

正如@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