2017-01-20 23 views
0

Ich habe ein Paket:Import all (*) aus dynamischer Datei

urls/ 
    __init__.py 
    dev_urls.py 
    prod_urls.py 

Dieses urls Paket ist in einer App api und in meinem Haupt urls.py:

... 
url(r'^api/v1/', include('apps.api.urls')), 
... 

Ich weiß, wenn ich hinzufügen dies urls.__init__.py Datei:

# __init__.py 
from dev_urls import * 

Django includin laufen g dev_urls.py als apps.api.urls.

Aber ich möchte diese Dynamik machen, indem eine Variable in meine Einstellungen Modul hinzufügen:

# settings 
URLS_ENV = 'dev' # This could be 'prod' 

Da ist in meinem urls.__init__.py:

# __init__.py 
from django.conf import settings 
name = settings.URLS_ENV + '_urls' 

hier Nun ist die Frage: Wie kann Ich mache etwas wie:

from <name> import * 

Ist das möglich?

+1

Nicht genau ein Duplikat, aber wahrscheinlich genug Informationen zu beantworten: http://StackOverflow.com/q/301134/4996248 –

+0

@JohnColeman Ich habe diese Antwort noch gelesen. Danken. Beachten Sie, dass ich die Funktionalität zum Importieren von 'apps.api.urls.dev_urls.py' als' apps.api.urls' mit '__init__py' erhalten soll – Gocht

Antwort

1

Nein, Sie können den importierten Namen nicht ändern, ohne den Dateinamen zu ändern. Die __name__-Eigenschaft, an die Sie wahrscheinlich denken, hängt davon ab, wie Sie sie importieren. Sie müssten einen benutzerdefinierten Import verwenden, wie John (see here to import *) vorgeschlagen oder den eingeschlossenen Pfad ändern, wie

... 
url(r'^api/v1/', include('apps.api.urls.' + settings.URLS_ENV + '_urls')), 
.. 
1

folgt ich diese Antwort gefunden https://stackoverflow.com/a/301139/3945375

Das ist für mich gearbeitet, dies läuft:

# urls.__init__.py 

from django.conf import settings 

mod = settings.URL_ENVIRONMENT + '_urls' 
exec 'from %s import *' % mod 
Verwandte Themen