2009-07-23 7 views
2

Ich entwickle eine Django-Anwendung. Module von Bedeutung für mein Problem sind unten angegeben:django - zirkuläres Importproblem beim Ausführen eines Befehls

globals.py -> enthält Konstanten, die in der gesamten Anwendung verwendet werden. SITE_NAME und SITE_DOMAIN sind zwei davon und werden verwendet, um einige Zeichenfolgen zu füllen. Hier ist, wie ich sie definieren:

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

models.py -> Modelle innerhalb dieses Moduls leben. einige Konstanten aus globals.py importiert

some_command.py -> ein Befehl, der auch einige Konstanten von Globals importiert.

bei Ausführung des Befehl importiert eine Konstante aus globals.py und läuft in ein kreisförmigen Import Problem: inside globals.py, get_current() von Seiten app genannt werden, und Seiten App wiederum importiert models.py, die Importe von globals.py auch hat.

EDIT:

Die Anwendung läuft einwandfrei, ohne diesen Kreis Import Problem zu begegnen. Importieren globals.py von Shell bringt keine Probleme. Sogar der Befehl kann von der Shell ohne Aufruf manage.py ausgeführt werden.

Warum funktioniert manage.py some_command aufgrund eines zirkulären Imports nicht?

Vielen Dank im Voraus.

Antwort

1

Gibt es einen besonderen Grund, warum Sie SITE_DOMAIN und SITE_NAME in globals.py speichern müssen? Diese sind bereits direkt aus dem Site-Framework verfügbar.

Laut the docs wird das Site-Objekt beim ersten Zugriff im Cache zwischengespeichert, so dass es nicht direkt weh tut, es zu importieren und dort zu verwenden.

+0

Einige String-Konstanten in globals.py verwenden sie, wie diese imaginäre: WELCOME_STRING = 'Willkommen bei'% SITE_NAME – shanyu

+0

Lol, Willkommen String-Konstante. Schreibst du auch einige deiner Ansichten in globals.py? http://www.c2.com/cgi/wiki?GlobalVariablesAreBad – drozzy

+0

@drozzy "globals.py" ist nur ein Container für Zeichenfolgen, die übersetzt werden. Es ist nicht mehr "global" als, sagen wir, settings.py. Nicht durch seinen Namen vorwegnehmen;) – shanyu

Verwandte Themen