我可以为 Django 自定义命令创建一个文件夹而不是文件吗?
Can I have a folder instead file for a Django custom command?
我知道创建自定义 Django 命令的唯一方法是将文件放入 project/app/management/commands
文件夹,如下所示 project/app/management/commands/my_custom_command.py
但我想知道是否有办法制作目录(如 python 包)而不是单个文件。它应该是这样的:
project
├── app
| ├── management
| | └── commands
| | ├── my_custom_command
| | | ├── __init__.py
| | | └── ... (other stuff like settings and output files)
| | └── ...
| └── ...
├── manage.py
└── ...
有办法做到这一点吗?我认为可以通过将命令内容保存在应用程序文件夹中来使用整个应用程序文件夹来执行类似的操作,但我不喜欢这种解决方案。
说明:我已经尝试使用包含 __init__.py
文件的文件夹,但没有成功。
不可能,包被排除在外,见django.core.management.find_commands
在 Django 3.1.5 中是:
def find_commands(management_dir):
"""
Given a path to a management directory, return a list of all the command
names that are available.
"""
command_dir = os.path.join(management_dir, 'commands')
return [name for _, name, is_pkg in pkgutil.iter_modules([command_dir])
if not is_pkg and not name.startswith('_')]
我知道创建自定义 Django 命令的唯一方法是将文件放入 project/app/management/commands
文件夹,如下所示 project/app/management/commands/my_custom_command.py
但我想知道是否有办法制作目录(如 python 包)而不是单个文件。它应该是这样的:
project
├── app
| ├── management
| | └── commands
| | ├── my_custom_command
| | | ├── __init__.py
| | | └── ... (other stuff like settings and output files)
| | └── ...
| └── ...
├── manage.py
└── ...
有办法做到这一点吗?我认为可以通过将命令内容保存在应用程序文件夹中来使用整个应用程序文件夹来执行类似的操作,但我不喜欢这种解决方案。
说明:我已经尝试使用包含 __init__.py
文件的文件夹,但没有成功。
不可能,包被排除在外,见django.core.management.find_commands
在 Django 3.1.5 中是:
def find_commands(management_dir):
"""
Given a path to a management directory, return a list of all the command
names that are available.
"""
command_dir = os.path.join(management_dir, 'commands')
return [name for _, name, is_pkg in pkgutil.iter_modules([command_dir])
if not is_pkg and not name.startswith('_')]