Команда управления djagno как пакет?
Я пытаюсь создать структуру каталогов для моих пользовательских команд Django.
Согласно учебнику Django команды создаются как модули в каталоге management/commands
.
например.
management/commands/closepoll.py
У меня много команд, поэтому я пытаюсь разделить их на пакеты. Я хочу иметь структуру пакета, например:
management/commands/closepoll/closepoll.py
<-- содержит класс Command
.
management/commands/closepoll/closepoll_utils.py
management/commands/closepoll/__init__.py
Попробовал, но Django не распознает команду.
Это невозможно, так как Django ищет только в каталоге команд, как мы можем видеть из исходного кода [GitHub]:
return [ name for _, name, is_pkg in pkgutil.iter_modules([command_dir]) if not is_pkg and not name.startswith("_") ]
Что вы можете сделать, так это иметь класс Command
в каталоге "commands", а остальные части могут быть в пакете:
managment/
├─ __init__.py
├─ commands/
│ ├─ __init__.py
│ ├─ closepoll.py
│ ├─ closepoll_utils/
│ │ ├─ __init__.py
В случае приведенного выше примера closepoll.py
будет иметь класс Command
, а то, что вы имели в closepoll_utils.py
, будет в closepoll_utils/__init__.py
. На самом деле вы даже можете иметь класс Command
в своем пакете и просто импортировать его в closepoll.py
.