Где следует разместить 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 были сломанный wrt. эта особенность. Похоже, что сообщество Django не могу решить, как это исправить (но пока я думаю, что они следует удалить DATETIME_FORMAT из документации или добавить заметка об этой проблеме к нему).

Я поместил эти строки в файл "settings.py" веб-сайта / проекта (не приложения), но, похоже, это не имеет никакого эффекта (после перезапуска сервера разработки):

DATETIME_FORMAT = 'Y-m-d H: i: sO'

DATE_FORMAT = 'Г-м-д'

Например, «29 июня 2009 г., 19:30» отображается при использовании сайта администратора Django.

Версия Django - 1.0.2 final, а версия Python - 2.6.2 (64 бит). Платформа: Windows XP 64 бит.

Вопрос о переполнении стека Европейский ввод даты в Django Admin , похоже, касается прямо противоположной проблемы (и, следовательно, очевидный противоречие).

Полный путь к файлу settings.py: D: \ dproj \ MSQall \ website \ GoogleCodeHost \ settings.py. Теперь я запускаю сервер разработки следующим образом (в окне командной строки Windows):

компакт-диск D: \ dproj \ MSQall \ website \ GoogleCodeHost

установить DJANGO_SETTINGS_MODULE = GoogleCodeHost.settings

python manage.py runserver 6800

Нет никакой разницы. Кроме того, они положительно читаются из файла "settings.py":

DATABASE_NAME

INSTALLED_APPS

TEMPLATE_DIRS

MIDDLEWARE_CLASSES

«django-admin.py startproject XYZ» не создает файл «settings.py», содержащий DATETIME_FORMAT или DATE_FORMAT. Может, этому есть причина?

Последовательность "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'

Таким образом, содержимое файла settings.py читается, но не действует в интерфейсе администратора Django.

12
Peter Mortensen 17 Июн 2009 в 01:43

4 ответа

Лучший ответ

Это решит конкретную проблему, которая невозможна с DATETIME_FORMAT (поскольку она игнорируется в текущих реализациях Django, несмотря на документацию), также является грязной и похожа на ответ ayaz (менее глобальный - повлияет только на представление списка сайта администратора):

Сразу после линии

(формат_даты, формат_даты_времени, формат_времени) = получить_формат_даты ()

В файле (Django обычно находится в папке Lib / site-packages в установке Python)

django / contrib / admin / templatetags / admin_list.py

Перезаписать значение datetime_format (для models.DateTimeField в модели):

datetime_format = 'Y-m-d H: i: sO'

И для полей только с датой:

date_format = 'Г-м-д'

Перезапуск веб-сервера (например, сервера разработки) или выход из интерфейса администратора НЕ необходим для это изменение вступит в силу. Простое обновление в веб-браузере это все, что требуется.

3
Peter Mortensen 28 Июн 2009 в 20:55

Две директивы настройки должны быть определены в settings.py. Не могли бы вы убедиться, что тот же settings.py, который вы редактируете, читается при запуске сервера разработки?

Вы всегда можете перейти к интерактивной оболочке Python, запустив python manage.py shell, и выполнить эти команды, чтобы убедиться, что значения формата даты / времени проходят нормально:

from django.conf import settings
settings.DATE_FORMAT
settings.DATETIME_FORMAT

Хорошо, я забыл его найти, но тикет № 2203 имеет дело с этим. К сожалению, билет остается в состоянии ожидания.

Я помню, что для проекта, в котором использовалась определенная версия магистрали ветки Django 0.97, я работал над этим, перезаписывая значения date_format и datetime_format в функции get_date_formats() внутри django/utils/translation/trans_real.py. Это было грязно, но я уже использовал своего рода Django для этого проекта, поэтому не видел, чтобы что-то пошло не так, если взломать его еще немного.

2
ayaz 17 Июн 2009 в 14:20

Как сказал Чиро Сантилли, формат локализации имеет приоритет над DATETIME_FORMAT в настройках при USE_L10N = True. Но вы все равно можете переопределить DATETIME_FORMAT и другие форматы даты и времени с помощью создание файлов пользовательского формата, как описано в документации Django.

Подробный ответ см. здесь.

Вы можете переопределить DATE_FORMAT, DATETIME_FORMAT, TIME_FORMAT и другие форматы даты и времени, когда USE_L10N = True с помощью создание файлов пользовательского формата, как описано в документации Django.

Таким образом:

  1. Установить FORMAT_MODULE_PATH = 'yourproject.formats' в settings.py
  2. Создайте структуру каталогов yourproject/formats/en (заменив en соответствующим кодом языкового стандарта ISO 639-1, если вы используете языковой стандарт, отличный от английского) и добавьте файлы __init__.py во все каталоги, чтобы сделать его допустимым Python модуль
  3. Добавьте formats.py в конечный каталог, содержащий определения формата, которые вы хотите переопределить, например DATE_FORMAT = 'j. F Y'.

Пример из реального проекта здесь .

4
Nimantha 11 Июн 2021 в 06:40