2009-07-22 8 views
1

Je suis actuellement à la documentation pour les sites Django:Comment configurer un projet Django avec différents sites utilisant les mêmes données?

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

qui explique comment associer le contenu avec plusieurs sites. L'exemple utilisé est LJWorld.com et Lawrence.com. À quoi ressemble la structure du projet Django pour ce qui précède?

Chaque site est une application sur son propre, par exemple:

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

Si ljworld a SITE_ID=1 et lawrence a SITE_ID=2, fait la variable SITE_ID doit être explicitement dans ljworld/settings.py et lawrence/settings.py?

Comment lancez-vous le serveur dev de ljworld ou lawrence?

Mise à jour:

J'ai utilisé deux sites avec un contenu partagé dans ce qui précède. Que faire si n sites différents partagent le même contenu? Ai-je vraiment besoin de n différents projets Django sur n serveurs différents, tous connectés au même serveur de base de données?

De plus, si je dois modifier settings.py qui devrait affecter tous ces sites Web, il sera très fastidieux de changer chacun de ces fichiers manuellement.

Répondre

6

Non, chaque site n'est pas une application en soi; chaque site est un projet seul. L'idée est d'avoir différents projets avec un contenu (entièrement ou partiellement) partagé. Donc, vous pourriez avoir une structure telle que:

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

, vous utiliserez deux serveurs Web pour servir les projets - bien que normalement les deux seraient référence au même serveur DB. Naturellement, vous pouvez également avoir des applications qui sont partagées entre les deux projets - il suffit de les conserver quelque part dans le PYTHONPATH du serveur.

Edit:

"Deux serveurs Web" bien sûr ne signifie pas nécessairement deux physiquement différents serveurs. Ils pourraient bien être deux hôtes virtuels s'exécutant sous la même instance de serveur Web - vous pouvez même lier les deux projets à deux répertoires différents sous le même hôte virtuel.

Pour les paramètres partagés, vous pouvez utiliser la même technique que pour les applications partagées. Avoir un module global_settings qui contient les paramètres partagés disponibles quelque part sur le PYTHONPATH et l'importer depuis chacun des settings.py.

Et si vous vouliez quelque chose de vraiment hackish, vous pourriez probablement même abandonner tous les différents projets, en utiliser un seul et créer un middleware qui modifie les paramètres à la volée. Mais je conseillerais contre.

Questions connexes