DATETIME_FORMAT
应该放在哪里才能影响Django管理站点(Django的自动管理界面)中的日期时间显示?DATETIME_FORMAT
的文档,在http://docs.djangoproject.com/en/1.0/ref/settings/页上,说:
"The default formatting to use for datetime fields on
Django admin change-list pages -- and, possibly, by
other parts of the system."
更新1:DATETIME_FORMAT
被破坏(它的值被忽略),尽管有文档。很多年前它是有效的,但从那时起Django的实现就被破坏了。这个特点。Django社区似乎无法决定如何修复它(但同时我认为他们应该从文档中删除DATETIME_FORMAT
或添加关于此问题的注解)。
我已经将这些行放入settings.py网站/项目(而不是应用程序)的文件“www.example.com”中,但它似乎没有任何效果(重新启动开发服务器后):
DATETIME_FORMAT = 'Y-m-d H:i:sO'
DATE_FORMAT = 'Y-m-d'
例如,当使用Django管理站点时,会显示“2009年6月29日,下午7:30”。
Django版本是1.0.2 final,Python版本是2.6.2(64位)。操作平台:Windows XP 64 bit.
堆栈溢出问题 * European date input in Django Admin * 似乎是关于完全相反的问题(因此是一个明显的矛盾)。
文件“www.example.com”的完整路径settings.py是“D:\dproj\MSQall\website\GoogleCodeHost\settings.py”。我现在以这种方式启动开发服务器(在Windows命令行窗口中):
cd D:\dproj\MSQall\website\GoogleCodeHost
set DJANGO_SETTINGS_MODULE=GoogleCodeHost.settings
python manage.py runserver 6800
没有区别。此外,这些是从文件“www.example.com”中读取settings.py的:
数据库名称
已安装_应用程序
模板_DIRS
中间件_类
“django-admin.py startproject XYZ”不会创建settings.py包含DATETIME_FORMAT
或DATE_FORMAT
的文件“www.example.com”。也许这是有原因的?
序列“d:“,“cd D:\dproj\MSQall\website\GoogleCodeHost”,“python manage.py shell”,“from django.conf import settings”,“settings.DATE_FORMAT”,“settings.DATETIME_FORMAT”输出(如预期):
'Y-m-d H:i:sO'
'Y-m-d'
因此,文件“www.example.com”的内容settings.py正在读取,但不会在Django Admin界面中生效。
5条答案
按热度按时间ejk8hzay1#
有:
DATE_TIME
生效,因为l10n的本地化覆盖了DATETIME_FORMAT
和DATE_FORMAT
,如下所示:https://docs.djangoproject.com/en/1.9/ref/settings/#date-formatvx6bjr1n2#
正如Ciro Santilli所说,当
USE_L10N = True
时,本地化格式会覆盖设置中的DATETIME_FORMAT
。但是你仍然可以通过创建Django文档中描述的自定义格式文件来覆盖DATETIME_FORMAT
和其他日期/时间格式。详细答案见here。
您可以通过创建Django文档中描述的自定义格式文件来覆盖
DATE_FORMAT
,DATETIME_FORMAT
,TIME_FORMAT
和其他日期/时间格式。总结如下:
1.在
settings.py
中设置FORMAT_MODULE_PATH = 'yourproject.formats'
1.创建目录结构
yourproject/formats/en
(如果使用英语以外的其他语言环境,请将en
替换为相应的ISO 639-1语言环境代码),并将__init__.py
文件添加到所有目录中,使其成为有效的Python模块1.将
formats.py
添加到叶目录,其中包含您要覆盖的格式定义,例如DATE_FORMAT = 'j. F Y'
.实际项目here的示例。
ie3xauqp3#
这将解决DATETIME_FORMAT无法解决的特定问题(因为尽管有文档,但在当前的Django实现中它被忽略了),也是脏的,类似于ayaz的答案(不太全局-只会影响管理站点列表视图):
就在排队之后
(date_format,datetime_format,time_format)= get_date_formats()
在文件中(Django通常在Python安装的文件夹Lib/site-packages中)
django/contrib/admin/templatetags/admin_list.py
覆盖datetime_format的值(对于模型中的models.DateTimeField):
datetime_format = 'Y-m-d H:i:sO'
对于仅日期字段:
date_format = 'Y-m-d'
重新启动Web服务器(例如开发服务器)或退出管理界面是不必要的更改生效。只需在Web浏览器中进行简单的刷新即可。
zfycwa2u4#
这两个设置指令应该在
settings.py
中定义。您能确保在启动开发服务器时读取的是您正在编辑的同一个settings.py
吗?你可以通过运行
python manage.py shell
进入Python交互式shell,并运行以下命令来确保日期/时间格式值是否正确:好吧,我忘记查了,但是ticket #2203处理了这个问题。不幸的是,票证仍处于待处理状态。
我记得在一个使用Django 0.97分支的 Backbone.js 版本的项目中,我通过覆盖
django/utils/translation/trans_real.py
中get_date_formats()
函数中的date_format
和datetime_format
值来解决这个问题。这是肮脏的,但我已经使用了一个自定义的Django的各种项目,所以没有看到任何错误的黑客它琐事更多。mutmk8jj5#
根据我对Django 4.2.1的实验,DateTimeField()的DATETIME_FORMAT只在Django模板中工作。此外,DateField()的DATE_FORMAT和TimeField()的TIME_FORMAT在Django模板中工作。* 你可以看到my question解释它。
并且,
DateTimeField()
和DateField()
的DATE_INPUT_FORMATS以及DateTimeField()
和TimeField()
的TIME_INPUT_FORMATS在Django Admin中工作。*DATETIME_INPUT_FORMATS不适用于Django项目的任何部分,你可以看到my question解释它。settings.py
中设置USE_L10NFalse
才能使上述设置生效,因为USE_L10N
在它们之前。