You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django日期验证时如何简洁格式化错误信息中的日期(指定dd-mmm-yyyy格式)

Django日期验证:格式化错误信息中的日期为dd-mmm-yyyy格式

嘿,我来帮你搞定这个日期格式化的问题!你当前的代码里,%(start_date)s只是直接输出datetime实例的默认字符串形式(比如2025-01-05),要改成更友好的dd-mmm-yyyy格式(比如05-Jan-2025),不需要替换格式符里的s,而是通过两种简单方式实现:

方式一:预先格式化日期后传入参数

先把start_date用strftime转换成目标格式,再传入params,代码修改如下:

from datetime import date
from django.utils.translation import ugettext_lazy as _
from django.core.exceptions import ValidationError

if start_date < date.today():
    # 用strftime格式化出dd-mmm-yyyy格式的日期字符串
    formatted_start_date = start_date.strftime('%d-%b-%Y')
    raise ValidationError(
        _('%(formatted_start_date)s must be on or after today.'),
        params={'formatted_start_date': formatted_start_date},
    )

方式二:直接在格式字符串中指定格式(新式格式化语法)

如果你不想额外定义变量,也可以改用Python的新式字符串格式化(str.format语法),Django 1.8+已经支持该语法与ugettext_lazy配合使用:

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:%d-%b-%Y} must be on or after today.'),
        params={'start_date': start_date},
    )

格式符说明

这里用到的格式化符号含义:

  • %d:两位数的日期(比如05、23)
  • %b:月份的英文缩写(比如Jan、Dec)
  • %Y:四位数字的年份(比如2025)

如果需要强制显示英文月份缩写(不受系统本地化影响),可以在格式化前临时设置locale,不过一般在英文环境下默认就是正确的。

内容的提问来源于stack exchange,提问作者Harjit Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 16:42:29