Django中USE_L10N废弃后,如何启用DATE_INPUT_FORMATS配置?
我是不是在Django里发现了一个Bug?
以下问题更新中包含已采纳正确答案的扩展版本
配置项USE_L10N自4.0版本起被废弃,并计划在5.0版本中移除。然而5.0版本的forms.DateField文档仍说明:
如果未提供input_formats参数,默认输入格式将取自当前区域设置的DATE_INPUT_FORMATS键,或者在本地化被禁用时取自DATE_INPUT_FORMATS配置。
这就引出了一个问题:当USE_L10N = False不再可用时,该如何禁用本地化并启用DATE_INPUT_FORMATS配置?
我目前不想升级到5.0版本,因此无法轻松测试。已确认在4.2版本中,若注释掉已废弃的USE_L10N = False,DATE_INPUT_FORMATS将不再生效。
更新:基于lucutzu33的回答(适用于Django 4.2)
我认为把全局生效的配置放在某个任意应用的目录结构里非常不符合直觉,实际上我们完全不用这么做……
修改settings.py
# USE_L10N = False # 已废弃 -> 将被移除 LANGUAGE_CODE = 'en-GB' FORMAT_MODULE_PATH = ['formats',] # 指向项目根目录下的/formats,因为这是全局生效的配置
创建目录与文件
需要创建以下目录和空文件:
<项目根目录>/formats<项目根目录>/formats/en_GB<项目根目录>/formats/__init__.py<项目根目录>/formats/en_GB/__init__.py
编写自定义格式配置
编辑<项目根目录>/formats/en_GB/formats.py,写入需要覆盖Django默认值的配置:
SHORT_DATE_FORMAT = 'd/m/y' DATE_INPUT_FORMATS = [ '%d/%m/%y', '%d/%m/%Y', # '25/10/06', '25/10/2006', '%d.%m.%Y', '%d.%m.%y', # 德国等欧盟国家常用的点分隔格式 '%Y-%m-%d', # ISO标准格式 yyyy-mm-dd # 可按需添加其他格式 ] DATETIME_INPUT_FORMATS = [ '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59' # 其他变体格式 '%Y-%m-%d', # '2006-10-25' '%d/%m/%Y %H:%M:%S', # '25/10/2006 14:30:59' # 其他变体格式... ]
(这些配置之前放在settings.py中,由USE_L10N=True激活,现在可以直接从那里剪切粘贴过来)
内容的提问来源于stack exchange,提问作者nigel222
相关产品推荐
相关产品推荐

