Как организовать файлы консольных команд из каталога <i>./app/management/commands/</i> так, чтобы их можно было разместить в подкаталогах и вызывать в стиле <i>manage.py subdir1.command1</i>?
Чтобы выполнить команду в консоли из определенного подкаталога, вы можете использовать следующую комбинацию команд: 1. Сначала перейдите в нужный подкаталог с помощью команды `cd`: ``` cd путь_к_подкаталогу ``` Например: ``` cd ./app/management/commands/ ``` 2. Затем выполните вашу команду. Например, если вы хотите выполнить команду `python script.py`, то сначала перейдите в каталог, где находится файл `script.py`, а затем выполните команду: ``` python script.py ``` Чтобы организовать файлы консолейых команд из каталога `./app/management/commands/` так, чтобы их можно было разместить в подкаталогах и вызывать в стиле `manage.py subdir1.command1`, вам следует создать вложенные подкаталоги внутри `./app/management/commands/` и помещать файлы команд в эти подкаталоги. Например, вы можете создать следующую структуру каталогов: ``` ./app └── management └── commands ├── subdir1 │ └── command1.py └── subdir2 └── command2.py ``` Теперь вы можете вызывать команды `command1` и `command2` следующим образом: ``` python manage.py subdir1.command1 python manage.py subdir2.command2 ``` Это позволит вам организовать и вызывать команды из различных подкаталогов в удобном и структурированном формате.
В Django каждая консольная команда должна быть модулем, который располагается в определенной структуре каталогов, чтобы Django мог его обнаружить и зарегистрировать.
Если прям жмет, то можно разместить __init__.py в каждом каталоге до консольной команды, с импортом вида:
from .command1 import Command1 # app/ # management/ # __init__.py <-- this import # commands/ # __init__.py <-- and this import # command1/ # __init__.py <-- and this import
Это позволит Django обнаруживать команды, находящиеся в подкаталогах, но при этом требует, чтобы каждая команда была в своем собственном подкаталоге и имела собственный __init__.py.
Кстати, имя команды которое Вы используете при вызове manage.py, должно соответствовать имени каталога, в котором находится команда. Соответственно, если Вы разместили команду в app/management/commands/subdir1/command1, Вы всё равно вызываете её как manage.py command1, не указывая subdir1. Django не поддерживает вызов команд с использованием точечной нотации для обозначения подкаталогов, как в Вашем примере subdir1.command1.