2010-10-04 6 views
6

Ich versuche von Anfang an das bestmögliche Setup für die Entwicklung meines django-Projekts zu bekommen und habe Probleme, alles in der Verzeichnisstruktur gut zu spielen. Ich habe virtualenvs (env in diesem Beispiel) eingerichtet, so dass ich eine saubere leere Python-Umgebung für jedes Django-Projekt bereitstellen kann.django-Projektverzeichnisstruktur und der Python-Pfad

Die Grundstruktur ist wie folgt:

/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 

Dies ist das grundlegende Layout ist; Ich möchte, dass jedes Projekt ein Verzeichnis für Anwendungen hat und in jeder Anwendung einen separaten Ordner für Modelle, Ansichten und URLs hat.

Das Problem, das ich habe, ist mit dem Python-Pfad und wie die Module behandelt werden.

Innerhalb einer Anwendung möchte ich nicht auf das Projekt zu beziehen haben beim Import von Modellen, also sollte ich verwenden:

import appname.models.modelname 

nicht:

import projectname.models.modelname 

reusablility zu helfen

Im Modellverzeichnis habe ich folgende init .py

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

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

Aber wenn ich versuche, eine separate URL-Datei zu verwenden (in /appname/urls/urlfile.py) und importieren Sie die Modelle wie die folgenden:

from appname.models.somemodel import ModelName 

ich ein „Modul nicht gefunden“ Error.

während:

from appsfolder.appname.models.somemodel import ModelName 

ok arbeitet

Ich nehme an, dies liegt daran, dass die Anwendung nicht direkt auf dem Python-Pfad ist, stattdessen ist es in einem Unterordner namens appsfolder, aber ich bin nicht sicher, wie um dies zu beheben, während alles wiederverwendbar und relativ bleibt.

Ich weiß eine Lösung ist, alle Anwendungen direkt auf den Python-Pfad unter Site-Pakete zu setzen, aber ich mag diese Idee nicht wirklich, da ich denke, dass die Anwendungen im Projekt sein sollten, wenn Sie

von virtualenv verwenden

Antwort

14

Sie können die folgenden in Ihrem settings.py setzen Sie Ihre appsfolder zu Ihrem PYTHONPATH hinzuzufügen: zum Spalten von meinem eigenen `appviews` Ordner im Projektstamm

import os 
import sys 

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

Dies kam praktisch. Sie haben einen für "Vorlagen", warum nicht auch Ansichten? – Droogans

Verwandte Themen