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
Dies kam praktisch. Sie haben einen für "Vorlagen", warum nicht auch Ansichten? – Droogans