2010-10-04 10 views
6

J'essaie d'obtenir la meilleure configuration possible pour développer mon projet django depuis le début et j'ai du mal à tout faire pour bien jouer dans la structure du répertoire. J'ai mis en place virtualenv (env dans cet exemple) afin que je puisse déployer un environnement python vide propre pour chaque projet django.structure du répertoire du projet django et le chemin python

La structure de base est la suivante:

/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 

C'est la mise en page de base; Je veux que chaque projet ait un répertoire pour les applications, et dans chaque application, un dossier séparé pour les modèles, les vues et les URL.

Le problème que j'ai est avec le chemin de python et comment les modules sont manipulés.

Dans une application, je ne veux pas avoir à se référer au projet lorsque l'importation de modèles à savoir que je devrais utiliser:

import appname.models.modelname 

pas:

import projectname.models.modelname 

pour aider reusablility

Dans le répertoire des modèles, j'ai les éléments suivants init .py

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

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

Mais quand je tente d'utiliser un fichier URL séparée (en /appname/urls/urlfile.py) et importer les modèles suivants:

from appname.models.somemodel import ModelName 

je reçois un « module introuvable » Erreur.

tout:

from appsfolder.appname.models.somemodel import ModelName 

fonctionne ok

Je présume que cela est parce que l'application ne soit pas directement sur le chemin de python, il est plutôt dans un sous-dossier appelé appsfolder, mais je ne suis pas sûr pour y remédier, tout en gardant tout ce qui est réutilisable et relatif.

Je sais qu'une solution consiste à mettre toutes les applications directement sur le chemin python sous les paquets de site, mais je n'aime pas vraiment cette idée, car je pense que les applications devraient être dans le projet si vous utilisez virtualenv's

Répondre

14

Vous pouvez mettre les éléments suivants dans votre settings.py pour ajouter votre appsfolder à votre PYTHONPATH:

import os 
import sys 

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

C'est bien pratique pour séparer de mon propre 'appviews' dossier dans la racine du projet. Ils en ont un pour les «templates», pourquoi pas aussi? – Droogans

Questions connexes