Неизвестная команда: 'collectstatic' после переопределения StaticFIlesConfig
Я следовал инструкциям на https://docs.djangoproject.com/en/5.0/ref/contrib/staticfiles/#s-customizing-the-ignored-pattern-list, чтобы переопределить ignore_patterns в моих статических файлах. Вот мои шаги на Django 5.0.6:
- Создали новое приложение
app_staticfiles
. - в
app_staticfiles/apps.py
этот код:
from django.contrib.staticfiles.apps import StaticFilesConfig
class AppStaticfilesConfig(StaticFilesConfig):
name = 'app_staticfiles'
ignore_patterns = ["CVS", ".*", "*~", "*.map",
"*.min.css", "*.min.js", "*.scss"]
В оригинальных staticfiles есть директория management
, в которой находятся следующие команды collectstatic
и findstatic
.
- Проект Django
settings.py
изменен:
INSTALLED_APPS = [
# ...
# 'django.contrib.staticfiles',
'app_staticfiles',
]
Теперь, когда я запускаю collectstatic
, я получаю ошибку Unknown command
. Очевидно, что я закомментировал исходное приложение из Django. Есть ли способ запустить его как есть, без необходимости копировать команды управления из исходного места в перезаписываемое приложение?
Думаю, самым простым способом будет просто реэкспорт исходной команды (команд) staticfiles из вашего пользовательского приложения:
app_staticfiles/management/commands/collectstatic.py
from django.contrib.staticfiles.management.commands.collectstatic import Command
__all__ = ["Command"]
Для постоянной настройкиignore_patterns
в команде collectstatic
(предоставляемой django.contrib.staticfiles
) в Django 5.0.6, помимо инструкций здесь, мне нужно было сделать следующее:
py manage.py startapp staticfiles
. Имя этого приложения должно бытьstaticfiles
, поскольку, когда мы позже будем ссылаться на исходную командуcollectstatic
, она будет ожидать это имя.- Очистите
apps.py
и вставьте следующее:
from django.contrib.staticfiles.apps import StaticFilesConfig
class StaticFilesConfig(StaticFilesConfig):
name = 'staticfiles'
ignore_patterns = ["CVS", ".*", "*~", "*.map", "*.min.css", "*.min.js",
"*.scss"] # your custom patterns
- Вы можете удалить
admin.py
,models.py
,tests.py
,views.py
, если хотите. - Создайте каталог
management/commands
в этом новом приложении, и создайте пустые файлы, названные точно так же, как файлы вdjango/contrib/staticfiles/management/commands
. В версии Django 5.0.6 это__init__.py
,collectstatic.py
,findstatic.py
иrunserver.py
. - Добавьте следующий код в каждый файл:
# __init__.py
# Leave empty
# collectstatic.py
from django.contrib.staticfiles.management.commands.collectstatic import Command
# findstatic.py
from django.contrib.staticfiles.management.commands.findstatic import Command
# runserver.py
from django.contrib.staticfiles.management.commands.runserver import Command
- В проекте Django
settings.py
заменитеdjango.contrib.staticfiles
на свой:
INSTALLED_APPS = [
# ...
# 'django.contrib.staticfiles',
'staticfiles',
]
- Теперь, когда вы набираете
py manage.py help
, вы должны увидеть, что команды доступны. Выполните эти команды, и все готово.
Проблема с этим подходом заключается в том, что если появятся новые команды, вам придется вручную добавлять 1-строчные файлы. Кроме того, пока неясно, что произойдет с другими файлами в приложении contrib. Если у меня возникнут какие-либо проблемы, я сообщу об этом. Мне бы очень хотелось, чтобы был лучший способ настроить это, слишком много жесткого кодирования.