2010-10-16 4 views
25

Ich habe ein Django-Projekt, sagen wir "Projekt1". Typische Ordnerstruktur für Anwendungen ist:Wie alle meine Django-Anwendungen in bestimmten Ordner zu halten

/project1/ 
     /app1/ 
     /app2/ 
     ... 
     __init__.py 
     manage.py 
     settings.py 
     urls.py 

Was soll ich tun, wenn ich alle meine Anwendungen in einigen separaten Ordner halten wollen, ‚Apps‘ zum Beispiel? So dass Struktur sollte wie folgt aussehen: sehr leicht

/project/ 
     apps/ 
       app1/ 
       app2/ 
       ... 
     __init__.py 
     manage.py 
     settings.py 
     urls.py 

Antwort

36

Sie können Ihre apps Ordner in Ihren Python-Pfad durch das Einfügen der folgenden in Ihrem settings.py hinzufügen:

import os 
import sys 

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

Dann Sie alle Anwendungen in diesem Ordner nur in der gleichen Art und Weise nutzen können, wie sie in Ihrem Projekt Wurzel waren!

+2

Wenn Sie mich fragen, führt dies zu Verwirrung. –

+1

Dies führt zu Konflikten beim Ausführen von Tests. –

12

Sie können dies tun, aber Sie müssen die settings.py ändern wie folgt aussehen:

INSTALLED_APPS = (
    'apps.app1', 
    'apps.app2', 
    # ... 
) 

Und Ihre urls.py wie folgt aussehen:

urlpatterns = patterns('', 
    (r'^app1/',include('apps.app1')),  
    (r'^app2/',include('apps.app2')),  
) 

.. und ändern, dass import s an die App Position zeigen

+0

Funktioniert das gut mit dem Test Runner? – yellottyellott

+4

Ich empfehle, diese Methode nicht zu verwenden, da dies dazu führen kann, dass andere Apps nicht auf Ihre eigene Anwendung verweisen können und Sie alle Importe in Ihren Apps so ändern müssen, dass sie auf das neue Verzeichnis verweisen. Ich denke, der richtige Weg ist in [Bernhard Vallants Antwort] (http://stackoverflow.com/a/3948821/1057102). – sleblanc

+0

Diesem Muster folgt das Projekt [django-oscar] (https://github.com/django-oscar/djangoscar). – Dineshs91

1

Wenn Sie mit virtualenv/virtualenvwrapper (und Sie sollten), können Sie die mitgelieferte add2virtualenv Befehl verwenden, um Ihre Python-Pfad zu erweitern:

mkdir apps 
cd apps 
pwd 
[/path/to/apps/dir] 

Kopie dieser Weg, dann in die Zwischenablage kopieren:

add2virtualenv /path/to/apps/dir 
2

Wie wäre es mit Ihnen die BASE_DIR Variable bereits in der settings.py vorhanden.

Fügen Sie einfach die folgende:

import sys 
sys.path.insert(0, os.path.join('BASE_DIR', 'apps')) 

Hoffnung, das hilft.

0

Fügen Sie einfach __init__.py (4 Unterstriche insgesamt) in Ihrem App-Ordner hinzu. Jetzt können Sie einfach tun

urlpatterns = [ 
     path('polls/',include('apps.polls.urls')), 
     path('admin/', admin.site.urls) 
]