2011-03-06 13 views
12

En Django, es fácil escribir custom management commands para django-admin.py/manager.py.¿Cómo hacer un comando de django-admin personalizado para todo el proyecto?

Sin embargo, estos comandos residen en el nivel de aplicación , no en el nivel general del proyecto. Pones implementaciones en el directorio <project_dir>/<app_dir>/management/commands, y se descubren automáticamente.

Tengo una serie de comandos que son a nivel de proyecto, no vinculados a ninguna aplicación en el proyecto. Puedo incluirlos en una de las aplicaciones, pero ¿hay alguna forma de implementar comandos de administración a nivel de proyecto en Django?

Respuesta

14

Puede tener una aplicación llamada core o similar, donde se incluyen cosas que no están relacionadas con ninguna aplicación. Estos pueden ser comandos de gestión, etiquetas temáticas, modelos y tal vez otros módulos como formularios, decoradores, middleware. Puede usar su directorio de proyecto en sí mismo como aplicación "core".

Aquí es cómo tiendo a estructurar mis proyectos:

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 

Mi INSTALLED_APPS por lo general se ve así:

INSTALLED_APPS = (
    ... 
    'project_name', 
    'project_name.not_reusable_app1', 
    'reusable_app1', 
    ... 
) 

que no dan ningún tratamiento especial a django aplicaciones compred con otros paquetes de Python . Por ejemplo, no los incluyo en apps o directorio similar.

Está claro que mis aplicaciones no reutilizables son parte del proyecto. Las aplicaciones no reutilizables en el proyecto generalmente usan varias utilidades del proyecto, por ejemplo project_name.utils.decorators.some_kind_of_deco.

Si no desea utilizar el proyecto como aplicación, como he mencionado, puede mover todo al project_name.core.

+0

Excelente sugerencia; ¡Gracias! – payne

+0

Fui para la aplicación 'core' como weel –

Cuestiones relacionadas