dynamisch laden django apps zur Laufzeit

8

Ist es möglich, Django-Apps zur Laufzeit dynamisch zu laden? Normalerweise werden Apps bei der Initialisierung geladen, indem das INSTALLED_APPS-Tupel in settings.py verwendet wird. Ist es jedoch möglich, zusätzliche Anwendungen zur Laufzeit zu laden? Ich stoße auf dieses Problem in verschiedenen Situationen. Eine Situation entsteht zum Beispiel beim Testen, wenn ich Apps dynamisch laden oder entladen möchte.

Um das Problem konkreter zu machen, stell dir vor, ich hätte ein Verzeichnis mit dem Namen apps , in das ich meine Apps lege, und ich möchte automatisch jede neue App installieren, die dorthin gelangt, ohne die settings.py manuell zu bearbeiten.

Das ist einfach genug. Befolgen Sie den Beispielcode in

Django: Fügen Sie Apps automatisch als Plugin hinzu und erstellen Sie automatisch URLs und andere Einstellungen

Wir fügen den folgenden Code in settings.py ein, um die Namen aller Unterverzeichnisse im App-Verzeichnis zu durchlaufen und das INSTALLED_APPS -Tupel in settings.py wie folgt zu erhöhen:

%Vor%

Danach, wenn ich in einer Django-Shell war, könnte ich etwas wie

%Vor%

und die Apps würden in settings.INSTALLED_APPS aufgelistet. Und wenn ich es tat

%Vor%

das würde die notwendigen db Tabellen für die apps erstellen.

Wenn ich nun jedoch dem Verzeichnis apps/ weitere Apps hinzufügen würde, ohne sie neu zu starten, würden diese nicht in settings.INSTALLED_APPS aufgeführt, und ein nachfolgender Aufruf von syncdb hätte keine Auswirkungen .

Was ich gerne wissen möchte, ist, ob ich etwas tun kann - ohne neu zu starten - um die Einstellungen neu zu laden und neue Apps zu laden / zu installieren.

Ich habe versucht, mein settings.py , d. h.     aus meinen Projekteinstellungen importieren

und dann reload that settings mit dem eingebauten Python, nachdem sich ein app Verzeichnis geändert hat. Obwohl settings.INSTALLED_APPS jetzt geändert wird, um die neu hinzugefügten Apps einzuschließen, macht dies letztlich keinen Unterschied. Zum Beispiel

%Vor%

zeigt nur die Original-Apps in apps und nicht die neu hinzugefügten und ebenso

%Vor%

sieht die neu hinzugefügten Apps nicht.

Wie ich oben erwähnt habe, denke ich über diese Situation besonders im Zusammenhang mit Tests nach, bei denen ich Apps dynamisch hinzufügen oder entfernen würde.

Ps. Ich arbeite mit django 1.6, aber auf Empfehlung von @RickyA sehe ich, dass es einige wesentliche Änderungen bei der Behandlung von Anwendungen in 1.7 gibt.

Ссылка

Ich bin mir immer noch nicht sicher, was das für das Problem bedeuten könnte, dem ich gegenüberstehe.

    
mjandrews 04.06.2014, 02:08
quelle

2 Antworten

1

Um meine eigene Frage zu beantworten ...

Obwohl ich keine vollständige Lösung für dieses Problem habe, verfüge ich über eine, die ausreicht, um Apps während des Tests dynamisch zu laden.

Die grundlegende Lösung ist einfach und ich fand sie unter ein kleiner bixly Blog .

Wenn ich mit meinem obigen Beispiel fortfahre, wenn ich in einer Django-Shell war und einige neue Apps hinzufügen und laden wollte, die meinem apps -Verzeichnis hinzugefügt wurden, konnte ich

machen %Vor%

und dann

%Vor%     
mjandrews 05.06.2014, 00:35
quelle
7

Update für Django 1.8 zum Laden einer App, die noch nicht geladen ist

%Vor%     
Davide 15.02.2016 16:05
quelle