2010-02-08 4 views
9

Django a le sites framework pour prendre en charge l'hébergement de plusieurs sites Web à partir d'une seule installation de Django.Comment tester localement le framework de sites de Django

EDIT (ci-dessous est une hypothèse erronée du système)


Je comprends que le middleware définit la valeur de settings.SITE_ID basée sur une recherche/cache du domaine de la requête.


EndEdit

Mais lors des tests sur place, je suis à http://127.0.0.1:8000/, pas http://my-actual-domain.com/

Comment puis-je afficher localement mes différents sites au cours du développement?

+0

Le lien a expiré maintenant. Regle-le, s'il te plait. –

Répondre

17

Créez un fichier settings.py distinct pour chaque site, y compris un paramètre SITE_ID approprié. Bien sûr, vous pouvez utiliser l'instruction import pour partager un paramètre commun entre les fichiers. A partir de maintenant lors de l'exécution du serveur de développement Django, spécifiez l'option --settings pour indiquer à Django le site à exécuter.

Par exemple (en supposant que vous avez deux fichiers de paramètres - settings_first.py et settings_second.py):

manage.py runserver --settings settings_first 

se déroulera le premier site, et

manage.py runserver --settings settings_second 

vous donnera un l'accès au deuxième site.

Vous pouvez également les exécuter simultanément, en spécifiant différents ports:

manage.py runserver 8001 --settings settings_first 

manage.py runserver 8002 --settings settings_second 

Les commandes ci-dessus (fonctionnent sur deux consoles différentes) fera le premier site accesible sous http://127.0.0.1:8001/, et le second sous http://127.0.0.1:8002/

3

Peut-être que vous êtes induit en erreur par la documentation. Vous avez écrit:

Je comprends que le middleware définit la valeur settings.SITE_ID en fonction d'une recherche/cache du domaine de requête.

Ce n'est pas le cas. Cela fonctionne exactement dans l'autre sens. Django utilise la valeur settings.ID_SITE pour rechercher l'objet Site correct dans la base de données. Cela renvoie votre nom de domaine et votre site préférés.

L'application sites a été conçue pour remplir (à mon avis) une utilisation rare que vous voulez avoir plusieurs sites avec la même base de données en arrière-plan. Cela vous permet de publier les mêmes articles sur différents sites tout en conservant la flexibilité que certains modèles sont disponibles pour un seul site.

Pour développer plusieurs projets (qui n'utilisent pas réellement le framework de sites), vous n'avez rien de particulier à spécifier. Vous pouvez utiliser la valeur par défaut SITE_ID définie sur 1.Pour utiliser les liens de l'administrateur sur le site Web, vous pouvez définir dans votre base de données de développement le domaine Site à localhost:8000.

Si vous souhaitez développer plusieurs sites utilisant la même base de données (et utiliser la structure des sites), vous devez avoir chaque projet avec un SITE_ID distinct mais les mêmes paramètres de base de données. Les valeurs pour SITE_ID dans chaque projet sur votre machine de développement sont dans la plupart des cas les mêmes que pour vos serveurs de production.

+0

Merci Gregor. Je pense que je suis grandement induit en erreur. Je vais probablement créer un middleware pour faire ce que Django faisait déjà, et lui demander un attribut de chaîne de requête 'site = my-site-1.com' quand le domaine demandé est dans settings.DEVELOPMENT_SERVERS, comme: si demande .META ['SERVER_NAME'] dans settings.DEVELOPMENT_SERVERS: #do rechercher et définir le site dans la session –

Questions connexes