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
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