2010-10-04 25 views
6

Estoy tratando de obtener la mejor configuración posible para desarrollar mi proyecto django desde el principio y estoy teniendo problemas para que todo funcione bien en la estructura del directorio. He configurado virtualenv's (env en este ejemplo) para poder implementar un entorno limpio de python vacío para cada proyecto django.Estructura del directorio del proyecto django y la ruta python

La estructura básica es la siguiente:

/env/ 
    /bin 
    /db   <--- Django DB 
    /downloads 
    /lib 
    /static  <--- Where css/imgs/js etc is served from 
    /project/ <--- Django root 
      /__init__.py 
      /settings.py 
      /manage.py 
      /appsfolder/ 
       /appname/ 
         /__init__.py 
         /models/ 
           /__init__.py 
           /somemodel.py 
         /urls/ 
          /__init__.py 
          /someurl.py 
         /views/ 
          /__init__.py 
          /someview.py 

Ésta es la disposición básica; Quiero que cada proyecto tenga un directorio para aplicaciones, y en cada aplicación tenga una carpeta separada para modelos, vistas y URL.

El problema que estoy teniendo es con la ruta de Python y cómo se manejan los módulos.

dentro de una aplicación, no quiero tener que referirse al proyecto cuando los modelos de importación, es decir, que debería usar:

import appname.models.modelname 
no

:

import projectname.models.modelname 

para ayudar reusablility

En el directorio de modelos, tengo el siguiente init .py

from model1 import ModelName1 
from model2 import ModelName2 
from model3 import ModelName3 

__all__ = ['ModelName1', 'ModelName2', 'ModelName3'] 

Pero cuando trato de usar un archivo URL separada (en /appname/urls/urlfile.py) e importar los modelos como la siguiente:

from appname.models.somemodel import ModelName 

me sale un "módulo no encontrado" error.

mientras:

from appsfolder.appname.models.somemodel import ModelName 

funciona bien

Supongo que esto se debe a que la aplicación no está directamente en la trayectoria de pitón, en cambio, se encuentra en una subcarpeta llamada appsfolder, pero no estoy seguro de cómo para arreglar esto, manteniendo todo reutilizable y relativo.

Sé que una solución es poner todas las aplicaciones directamente en el camino de python en paquetes de sitio, pero realmente no me gusta esta idea, ya que creo que las aplicaciones deberían estar en el proyecto si está utilizando virtualenv

Respuesta

14

Usted puede poner lo siguiente en su settings.py añadir su appsfolder a su PYTHONPATH:

import os 
import sys 

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

Este fue práctico para la división de mi propia 'appviews' carpeta en la raíz del proyecto. Tienen uno para 'templates', ¿por qué no views también? – Droogans

Cuestiones relacionadas