2010-10-16 6 views
25

Tengo un proyecto de Django, digamos "proyecto1". estructura de carpetas típico para las solicitudes es:Cómo mantener todas mis aplicaciones de django en una carpeta específica

/project1/ 
     /app1/ 
     /app2/ 
     ... 
     __init__.py 
     manage.py 
     settings.py 
     urls.py 

¿Qué debo hacer si quiero mantener todas mis aplicaciones de alguna carpeta separada, aplicaciones '', por ejemplo? De manera que la estructura debe ser similar a la siguiente:

/project/ 
     apps/ 
       app1/ 
       app2/ 
       ... 
     __init__.py 
     manage.py 
     settings.py 
     urls.py 

Respuesta

36

Usted puede añadir su carpeta apps a su ruta pitón insertando lo siguiente en su settings.py:

import os 
import sys 

PROJECT_ROOT = os.path.dirname(__file__) 
sys.path.insert(0, os.path.join(PROJECT_ROOT, 'apps')) 

continuación, puede utilizar todas las aplicaciones en esta carpeta acaba de la misma manera como lo fueron en la raíz de su proyecto!

+2

Si me preguntas, esto genera confusión. –

+1

Esto genera conflictos al ejecutar las pruebas. –

12

Esto se puede hacer muy fácilmente, pero hay que cambiar el settings.py a tener este aspecto:

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

Y su urls.py a tener este aspecto:

urlpatterns = patterns('', 
    (r'^app1/',include('apps.app1')),  
    (r'^app2/',include('apps.app2')),  
) 

.. y modificar cualquier import s para que apunte a la ubicación de la aplicación

+0

¿Funciona así con el corrector de prueba? – yellottyellott

+4

Recomiendo no usar este método, ya que podría llevar a que otras aplicaciones no puedan hacer referencia a su propia aplicación y requerirá que cambie todas las importaciones en sus aplicaciones para que apunten al nuevo directorio. Creo que el camino correcto es en [la respuesta de Bernhard Vallant] (http://stackoverflow.com/a/3948821/1057102). – sleblanc

+0

Este mismo patrón se sigue en el proyecto [django-oscar] (https://github.com/django-oscar/django-oscar). – Dineshs91

1

Si está utilizando virtualenv/virtualenvwrapper (y debe ser), puede utilizar el comando incluido add2virtualenv para aumentar su trayectoria pitón:

mkdir apps 
cd apps 
pwd 
[/path/to/apps/dir] 

Copiar al portapapeles ese camino, entonces:

add2virtualenv /path/to/apps/dir 
2

¿Qué tal si utiliza la variable BASE_DIR ya presente en el settings.py.

Apenas añada el siguiente:

import sys 
sys.path.insert(0, os.path.join('BASE_DIR', 'apps')) 

Espero que esto ayude.

0

Simplemente agregue __init__.py (4 guiones bajos en total) en su carpeta de aplicaciones. Ahora puede hacer

urlpatterns = [ 
     path('polls/',include('apps.polls.urls')), 
     path('admin/', admin.site.urls) 
] 
Cuestiones relacionadas