Frage

Ich bin mit django und ich habe eine Datei mit dem Namen models.admin.py und ich mag die folgende Idee in models.py tun:

from "models.admin" import *

ich jedoch einen Syntaxfehler erhalten für doppelte Anführungszeichen mit. Aber wenn ich nur tun

from models.admin import *

dann bekomme ich "Import: Kein Modul mit dem Namen admin"

Gibt es eine Möglichkeit aus einer Python-Datei zu importieren, die einen Punkt in seinem Namen hat?

War es hilfreich?

Lösung

Eigentlich Sie können ein Modul mit einem ungültigen Namen importieren. Aber Sie werden verwenden müssen imp für das, z.B. Datei unter der Annahme, namens models.admin.py ist, könnten Sie tun,

import imp
with open('models.admin.py', 'rb') as fp:
    models_admin = imp.load_module(
        'models_admin', fp, 'models.admin.py',
        ('.py', 'rb', imp.PY_SOURCE)
    )

Aber lesen Sie die Dokumentation auf imp.find_module und imp.load_module , bevor Sie es benutzen.

Andere Tipps

Wenn Sie wirklich möchten, können Sie ein Modul mit einem ungewöhnlichen Dateinamen importieren können (zB ein Dateiname ein enthält vor dem ‚.py‘ ‚‘) die imp-Modul:

>>> import imp
>>> a_b = imp.load_source('a.b', 'a.b.py')
>>> a_b.x
"I was defined in a.b.py!"

Allerdings, das ist generell eine schlechte Idee. Es ist wahrscheinlicher, dass Sie versuchen, Pakete zu verwenden, in dem Fall, dass Sie ein Verzeichnis mit dem Namen „a“ erstellen sollten, eine Datei mit dem Namen „b.py“ enthalten; und dann "Import a.b" lädt ein / b.py.

Die Datei wird models/admin.py genannt. ( Quelle )

Das heißt, es sollte admin.py in einem Verzeichnis namens models aufgerufen werden.

Dann können Sie importieren from models.admin import * verwenden, vorausgesetzt, dass es in Ihrem Python-Pfad ist.

Nein, Sie können nicht eine Python-Datei als ein Modul importiert werden, wenn der Name einen Punkt (oder ein Fragezeichen oder Ausrufezeichen, etc.) enthält. Der Name einer Python-Modul (ohne die Py) ein gültiger Python-Name sein muss (dh kann als Variablennamen verwendet werden).

Sie verweisen nicht Dateien in der Import-Anweisung, die Sie verweisen Module und Pakete .

Bitte lesen Sie die docs , sind sie in dieser Frage sehr klar.

Wie auch immer, da Sie django verwenden, wird der üblicher Ansatz nicht funktionieren. Wenn Sie Modelle halten in separaten Dateien wollen, anstatt in models.py, müssen Sie zusätzliche Schritte unternehmen, umrissen, zum Beispiel, hier .

Edit:
Nun, ich weiß nicht wirklich, was die questioneer meint, wenn er Admin erwähnt und ob es auf das Admin-Interface von django verwendet ist. Meine Punkte stehen noch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top