2017-11-24 2 views
0

Als Teil eines Django-Projekts kann mein Benutzer aus einer Vielzahl von Optionen auswählen. Die Funktionalität für jede Option wird in einer separaten App gespeichert. Meine Projektstruktur sieht ungefähr so ​​aus:Iterieren über eine Teilmenge von Apps in Django

MyProject/ 
    MyProject 
    App1 
    App2 
    Options/ 
     Option1/ 
     Option2/ 
     Option3/ 
     … 
    … 
    manage.py 

Option1, Option2 usw. ist jeweils eine App in seinem eigenen Recht, und aufgeführt in INSTALLED_APPS Meine Frage ist: Gibt es eine Möglichkeit von Iterieren über jede App in den Optionen enthalten Verzeichnis. Angenommen, jede App enthält eine Datei namens utils.py mit einer Funktion namens foo in jeder Datei utils.py.

Gibt es eine Möglichkeit etwas wie dies zu tun:

from .. import Options 
survey = [ app.utils.foo() for app in Options] 

dies nicht möglich, gibt es eine Möglichkeit, nur alle Apps iterieren? Kann ich vielleicht etwas mit django.apps machen?

Antwort

1

Je nachdem, wie Sie haben Ihre apps.py konfiguriert

from django.apps import apps 

for name, app in apps.app_configs.items(): 
    if name in ['OPTIONS-N']: 
     utils = app.module.utils 
+0

Hallo Tobey, das ist wirklich hilfreich, danke. Ich kann das ['OPTIONS-N'] Bit nicht ganz zum Laufen bringen, ist das nur eine Abkürzung für eine Liste aller Apps, die im Optionsverzeichnis enthalten sind? oder gibt es eine Syntax, mit der ich nicht vertraut bin? – Tim

+0

auch, das gibt mir den Fehler: Modul 'Options.Option1' hat kein Attribut 'utils'. Wenn ich von .options1 import utils einfüge, wird es in Ordnung funktionieren, aber dann brauche ich diese Zeile für jede App, die den Punkt des Codes an erster Stelle vereitelt, weil ich möchte, dass es dynamisch ist. – Tim

+0

Ja, "Option-N" war eine Abkürzung für eine Liste von Optionen. Stellen Sie sicher, dass alle Ihre "Option-N" Ordner ein "__init __. Py" enthalten. Möglicherweise müssen Sie die Zeile 'from hinzufügen. importieren utils da – Tobey

0

settings.py ist eine Standard-Python-Datei, also warum nicht die INSTALLED_APPS Liste in Ihre Ansicht importieren, oder wo auch immer Sie es brauchen:

from settings import INSTALLED_APPS 

dann

nur
for app in INSTALLED_APPS: 
    ... 
+0

Danke für die Antwort. Ich denke nicht, dass dies funktioniert, da INSTALLED_APPS eine Liste von Strings ist. Es würde auch alle Apps zurückgeben, nicht nur die im Optionsordner enthaltenen. – Tim

+0

Fair genug. Ich hatte mir gedacht, dass ich dann eine Art Regex anwenden würde, um die benötigten Apps zu sortieren. – 16shells

Verwandte Themen