Неизвестная команда: 'collectstatic' после переопределения StaticFIlesConfig

Я следовал инструкциям на https://docs.djangoproject.com/en/5.0/ref/contrib/staticfiles/#s-customizing-the-ignored-pattern-list, чтобы переопределить ignore_patterns в моих статических файлах. Вот мои шаги на Django 5.0.6:

  1. Создали новое приложение app_staticfiles.
  2. в 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.

  1. Проект 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, помимо инструкций здесь, мне нужно было сделать следующее:

  1. py manage.py startapp staticfiles. Имя этого приложения должно быть staticfiles, поскольку, когда мы позже будем ссылаться на исходную команду collectstatic, она будет ожидать это имя.
  2. Очистите 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
  1. Вы можете удалить admin.py, models.py, tests.py, views.py, если хотите.
  2. Создайте каталог management/commands в этом новом приложении, и создайте пустые файлы, названные точно так же, как файлы в django/contrib/staticfiles/management/commands. В версии Django 5.0.6 это __init__.py, collectstatic.py, findstatic.py и runserver.py.
  3. Добавьте следующий код в каждый файл:
# __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
  1. В проекте Django settings.py замените django.contrib.staticfiles на свой:
INSTALLED_APPS = [
    # ...
    # 'django.contrib.staticfiles',
    'staticfiles',
]
  1. Теперь, когда вы набираете py manage.py help, вы должны увидеть, что команды доступны. Выполните эти команды, и все готово.

Проблема с этим подходом заключается в том, что если появятся новые команды, вам придется вручную добавлять 1-строчные файлы. Кроме того, пока неясно, что произойдет с другими файлами в приложении contrib. Если у меня возникнут какие-либо проблемы, я сообщу об этом. Мне бы очень хотелось, чтобы был лучший способ настроить это, слишком много жесткого кодирования.

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