2009-07-23 5 views
2

Je développe une application django. Les modules d'importance pour mon problème sont donnés ci-dessous:django - problème d'importation circulaire lors de l'exécution d'une commande

globals.py -> contient des constantes qui sont utilisées dans toute l'application. SITE_NAME et SITE_DOMAIN sont deux de ceux-ci et sont utilisés pour remplir certaines chaînes. Voici comment je les ai définis:

from django.contrib.sites.models import Site 
... 
SITE_DOMAIN = Site.objects.get_current().domain 
SITE_NAME = Site.objects.get_current().name 

models.py -> modèles vivent à l'intérieur de ce module. importe certaines constantes de globals.py

some_command.py -> une commande qui importe également des constantes à partir de globals.

lorsqu'il est exécuté, les importations de commande une constante de globals.py et se jette dans un problème d'importation circulaire: à l'intérieur globals.py, get_current() de des sites app est appelée, et les sites app à son tour importe models.py qui a également les importations de globals.py.

EDIT:

L'application fonctionne parfaitement, sans rencontrer ce problème circulaire d'importation. L'importation de globals.py depuis le shell n'entraîne aucun problème. Même la commande peut être exécutée à partir du shell sans appeler manage.py.

Alors pourquoi manage.py une commande échoue en raison d'une importation circulaire?

Merci d'avance.

Répondre

1

Y a-t-il une raison particulière pour laquelle vous devez stocker SITE_DOMAIN et SITE_NAME dans globals.py? Ceux-ci sont déjà disponibles directement à partir du framework de sites.

Selon l'the docs, l'objet de site est mis en cache la première fois que vous y accédez, donc l'importer et l'utiliser directement ne fait pas de mal.

+0

Certaines constantes de chaîne dans globals.py les utilisent, telles que celle-ci imaginaire: WELCOME_STRING = 'Bienvenue dans'% SITE_NAME – shanyu

+0

Lol, constante chaîne de bienvenue. Ecrivez-vous aussi quelques-unes de vos opinions dans globals.py? http://www.c2.com/cgi/wiki?GlobalVariablesAreBad – drozzy

+0

@drozzy "globals.py" est juste un conteneur pour les chaînes qui sont traduites. Ce n'est pas plus "global" que, par exemple, settings.py. Ne préjuge pas de son nom;) – shanyu

Questions connexes