Django статические файлы не согласованы между DEBUG=True и после `collectstatic`
Мое действие "Select all {amount} {model}s", которое должно быть в панели действий при просмотре страницы модели в админке Django, не работает в production.
Ожидаемое поведение, как записано при локальном запуске с DEBUG=True
в local_settings.py
:
Поведение при развертывании на этапе постановки и при локальном запуске с DEBUG=False
:
У меня проблемы с несоответствием между статическими файлами, с которыми работают мои шаблоны, между локальным запуском команды runserver
с командой DEBUG=True
и запуском той же базы данных после выполнения команды collectstatic
и последующего запуска с командой DEBUG=False
в моих настройках.
Разница в статических файлах также видна в перечисленных источниках при осмотре страницы. Работает правильно:
Не работает правильно:
Выполнение команды collectstatic
дает мне следующий результат:
Loading .env environment variables...
Found another file with the destination path 'admin/js/actions.js'. It will be ignored since only the first encountered file is collected. If this is not what you want, make sure every static file has a unique path.
Found another file with the destination path 'admin/js/admin/RelatedObjectLookups.js'. It will be ignored since only the first encountered file is collected. If this is not what you want, make sure every static file has a unique path.
Found another file with the destination path 'admin/js/admin/DateTimeShortcuts.js'. It will be ignored since only the first encountered file is collected. If this is not what you want, make sure every static file has a unique path.
Но локально, и actions.js
, и actions.min.js
присутствуют в моей папке статических файлов. Я не хочу включать DEBUG на производственных развертываниях, но в настоящее время я не знаю, как решить эту проблему. Любая помощь будет принята с благодарностью.
Это не полный ответ
Скорее всего, это проблема, вызванная тем, что не созданы пространства имен для статических файлов. Цитируя документацию Django:
Теперь мы могли бы обойтись размещением наших статических файлов непосредственно в
my_app/static/
(вместо того, чтобы создавать еще один подкаталогmy_app
), но на самом деле это плохая идея. Django будет использовать первый найденный статический файл, имя которого совпадает, и если бы у вас был статический файл с таким же именем в другом приложении, Django не смог бы отличить их друг от друга. Нам нужно иметь возможность указать Django на нужный файл, и лучший способ обеспечить это - разделить их по именам. То есть, поместив эти статические файлы в другой каталог, названный в честь самого приложения.
Вы можете использовать пространство имен статических активов в
STATICFILES_DIRS
, указывая префиксы .
Если вы создали некоторые пользовательские JavaScript или CSS, убедитесь, что вы поместили их в папку внутри папки static
с другим именем. Таким образом, путь к файлу будет уникальным и файл будет собран.
Я решил проблему, обновив версию grappelli с 2.15 до 3.0. Я подозреваю, что эта проблема похожа на ту, с которой я столкнулся, и обновление версий, похоже, решило ее.
Наиболее заметной частью проблемы был тот факт, что в моих статических файлах постоянно появлялся минифицированный actions.min.js
, который, похоже, был не граппеллийской версией файла actions.js
, а "ванильной" Django, что объясняет отсутствие функции "Выбрать все". Я подозреваю, что комбинация моей версии Django и Grappelli вызвала эту проблему как раздражающую. Обновление версий обеих версий кажется наиболее надежным решением.