如何进行项目范围的自定义django-admin命令?

pay*_*yne 15 django

在Django中,为django-admin.py/manager.py 编写自定义管理命令很容易.

但是,这些命令驻留在应用程序级别,而不是整个项目级别.您将实现放入<project_dir>/<app_dir>/management/commands目录中,然后自动发现它们.

我有许多项目级别的命令,与项目中的任何一个应用程序无关.我可以将它们放在其中一个应用程序中,但有没有办法在Django中实现项目级管理命令?

Ski*_*Ski 17

您可以拥有名为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
Run Code Online (Sandbox Code Playgroud)

INSTALLED_APPS通常看起来像这样:

INSTALLED_APPS = (
    ...
    'project_name',
    'project_name.not_reusable_app1',
    'reusable_app1',
    ...
)
Run Code Online (Sandbox Code Playgroud)

我不对任何与其他python包兼容的django应用程序进行任何特殊处理.例如,我不把它们放在apps相似的目录下.

很明显,我的不可重复使用的应用程序是项目的一部分.例如,项目下不可重复使用的应用程序通常使用项目中的各种实用程序project_name.utils.decorators.some_kind_of_deco.

如果您不喜欢将项目用作应用程序,就像我提到的那样,您可以将所有内容都移动到project_name.core.