2009-02-04 15 views
14

¡Soy un experimentado programador PHP que usa Django por primera vez, y creo que es increíble!Django Installed Apps Ubicación

Tengo un proyecto que tiene muchas aplicaciones, así que quise agruparlas en una carpeta de aplicaciones.

Así que la estructura del proyecto es:

/project/ 
/project/apps/ 
/project/apps/app1/ 
/project/apps/app2 

Luego, en la configuración de Django he puesto esto:

INSTALLED_APPS = (
    'project.apps.app1', 
    'project.apps.app2', 
) 

no parece que esto funcione?

¿Alguna idea sobre cómo puede poner todas sus aplicaciones en una carpeta separada y no en la raíz del proyecto?

Muchas gracias.

+0

¿Estás usando PYTHONPATH? Si es así, proporcione ese valor, también. –

Respuesta

37

Asegúrese de que el archivo '__init__.py' es en el directorio de aplicaciones, si no está ahí no será reconocido como parte del paquete.

Así que cada una de las carpetas de archivos aquí debe tener '__init__.py' en ella. (vacío está muy bien).

/project/ 
/project/apps/ 
/project/apps/app1/ 
/project/apps/app2 

Luego, mientras su carpeta raíz 'módulo' esté en su PYTHONPATH, podrá importar desde sus aplicaciones.

Aquí está la documentación relativa a la ruta de búsqueda de Python para su lectura:

http://docs.python.org/install/index.html#modifying-python-s-search-path

Y una buena explicación sencilla de lo que es para __init__.py archivo:

http://effbot.org/pyfaq/what-is-init-py-used-for.htm

+1

Si alguna de estas aplicaciones es lo suficientemente genérica como para ser posiblemente reutilizable (y es una buena idea hacerlas así si puede), puede ahorrarse un dolor de cabeza colocándolas en una ubicación de ruta que no las vincule al proyecto. –

+0

De acuerdo, ese es un buen punto. – monkut

1

Mientras sus aplicaciones estén en su PYTHONPATH, todo debería funcionar. Intenta establecer esa variable de entorno en la carpeta que contiene tus aplicaciones.

PYTHONPATH="/path/to/your/apps/dir/:$PYTHONPATH" 
0

Su alto nivel urls.py (también nombrado en su settings.py) debe ser capaz de utilizar una "importación" declaración simple para obtener sus aplicaciones.

¿Funciona import project.apps.app1.urls? De lo contrario, su PYTHONPATH no está configurado correctamente o no instaló su proyecto en el directorio site-packages de Python.

Sugiero usar la variable de entorno PYTHONPATH, en lugar de instalar en paquetes de sitio. Las aplicaciones de Django (para mí, de todos modos) parecen más fáciles de administrar cuando están fuera de los paquetes del sitio.

Hacemos lo siguiente: proyectos

  • Django van en /opt/project/.

  • PYTHONPATH incluye /opt/project.

  • Nuestra utiliza settings.pyapps.this y apps.that (tenga en cuenta que la parte project del nombre es parte de la PYTHONPATH, no forma parte de la importación.