在Django中,为{django-admin.py/manager.py写custom management commands很容易。
但是,这些命令位于应用程序级别,而不是整个项目级别。您将实现放入<project_dir>/<app_dir>/management/commands
目录,然后自动发现它们。
我有许多项目级别的命令,与项目中的任何一个应用程序无关。我可以把它们放在其中一个应用程序中,但有没有办法在Django中实现项目级管理命令?
答案 0 :(得分:15)
您可以拥有名为core
的应用程序或类似应用程序,其中包含与任何应用程序无关的内容。这些可以是管理命令,temlatetags,模型以及其他模块,如表单,装饰器,中间件。您可以将项目目录本身用作“核心”应用程序。
以下是我倾向于构建项目的方式:
project_name
not_reusable_app1
not_reusable_app2
templatetages
tempates
utils
models.py
settings.py
management
middleware.py
forms.py
processors.py
__init__.py
parts
reusable-app-1
reusable_app_1
setup.py
reusable-app-2
reurable-app-3
gereric-python-lib
django
setup.py
我的INSTALLED_APPS
通常看起来像这样:
INSTALLED_APPS = (
...
'project_name',
'project_name.not_reusable_app1',
'reusable_app1',
...
)
我不对任何与其他python包兼容的django应用程序进行任何特殊处理。例如,我不会将它们放在apps
或类似的目录下。
很明显,我的不可重复使用的应用程序是项目的一部分。项目中不可重复使用的应用程序通常使用项目中的各种实用程序,例如project_name.utils.decorators.some_kind_of_deco
。
如果您不喜欢将项目用作应用程序,就像我提到的那样,您可以将所有内容移至project_name.core
。