Django статические файлы не согласованы между DEBUG=True и после `collectstatic`

Мое действие "Select all {amount} {model}s", которое должно быть в панели действий при просмотре страницы модели в админке Django, не работает в production.

Ожидаемое поведение, как записано при локальном запуске с DEBUG=True в local_settings.py: Django footer action bar showing a dropdown, then three buttons; "100 out of 100 selected", "Select all 3000 Films" and "Execute" all translated to Dutch.

Поведение при развертывании на этапе постановки и при локальном запуске с DEBUG=False: Django footer action bar showing a dropdown, then three buttons; "0 out of 100 selected", then one offset slightly higher saying "100 out of 100 selected" and "Execute". There is no "Select all".

У меня проблемы с несоответствием между статическими файлами, с которыми работают мои шаблоны, между локальным запуском команды runserver с командой DEBUG=True и запуском той же базы данных после выполнения команды collectstatic и последующего запуска с командой DEBUG=False в моих настройках.

Разница в статических файлах также видна в перечисленных источниках при осмотре страницы. Работает правильно:

Filesystem showing the file "actions.js"

Не работает правильно:

Filesystem showing the file "actions.min.js"

Выполнение команды 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 вызвала эту проблему как раздражающую. Обновление версий обеих версий кажется наиболее надежным решением.

Вернуться на верх