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
相关产品推荐
相关产品推荐

