2009-07-22 4 views
1

Ich suche derzeit in der Dokumentation für Django Websites:Wie richte ich ein Django-Projekt mit verschiedenen Sites mit denselben Daten ein?

http://docs.djangoproject.com/en/dev/ref/contrib/sites/#ref-contrib-sites

, die erklärt, wie Sie Inhalte mit mehreren Standorten zu verbinden. Das verwendete Beispiel ist LJWorld.com und Lawrence.com.

Wie sieht die Django-Projektstruktur für das Obige aus? Ist jeder Standort eine App auf seinem eigenen, zum Beispiel:

project/ 
    manage.py 
    settings.py 
    urls.py 
    ljworld/ 
     models.py 
     views.py 
    lawrence/ 
     models.py 
     views.py 

Wenn ljworld SITE_ID=1 hat und lawrence hat SITE_ID=2, hat die SITE_ID Variable explizit in ljworld/settings.py und lawrence/settings.py eingestellt werden muss?

Wie laufen Sie den dev-Server von ljworld oder lawrence?

Update:

benutzte ich zwei Websites mit gemeinsam genutztem Inhalt in den oben genannten. Was ist zu tun, wenn es n verschiedene Websites gibt, die denselben Inhalt teilen? Brauche ich wirklich n verschiedene Django-Projekte auf n verschiedenen Servern, die alle mit demselben Datenbankserver verbunden sind?

Darüber hinaus, wenn ich eine Änderung in settings.py vornehmen muss, die alle diese Websites betreffen sollte, wird es sehr mühsam sein, jede dieser Dateien manuell zu ändern.

Antwort

6

Nein, jede Seite ist keine eigene App. Jede Seite ist ein Projekt für sich. Die ganze Idee besteht darin, verschiedene Projekte mit einem (vollständig oder teilweise) geteilten Inhalt zu haben. Sie könnte also eine Struktur hat, wie zum Beispiel:

ljworld/ 
    manage.py 
    settings.py 
    urls.py 
    ljworld_specific_app1/ 
    ... 
lawrence/ 
    manage.py 
    settings.py 
    urls.py 
    lawrence_specific_app1/ 

Sie normalerweise zwei Web-Server verwenden würde, die Projekte zu dienen - obwohl normalerweise beide auf den gleichen DB-Server beziehen würden. Natürlich können Sie auch Apps haben, die zwischen den beiden Projekten geteilt werden - halten Sie sie einfach irgendwo im PYTHONPATH des Servers.

Edit:

"Zwei Webserver" natürlich nicht unbedingt ein zwei physisch verschiedenen Servern. Sie könnten zwei virtuelle Hosts sein, die unter der gleichen Web-Server-Instanz laufen - heck, Sie könnten die beiden Projekte sogar auf zwei verschiedene Verzeichnisse unter demselben virtuellen Host abbilden.

Für gemeinsame Einstellungen können Sie die gleiche Technik wie für freigegebene Apps verwenden. Habe ein global_settings-Modul, das die freigegebenen Einstellungen enthält, die irgendwo auf dem PYTHONPATH verfügbar sind, und importiere es von jedem settings.py.

Und wenn Sie etwas wirklich hackish wollten, könnten Sie wahrscheinlich sogar alle verschiedenen Projekte löschen, verwenden Sie nur eine und erstellen Sie eine Middleware, die Einstellungen im laufenden Betrieb ändert. Aber ich würde davon abraten.

Verwandte Themen