Meine API wird gebaut, um es Entwicklern zu ermöglichen, ihre Funktionalität zu erweitern. Mein Plan ist, dies zu tun, indem ich ein "extensions" -Verzeichnis zur Verfügung stelle, in dem sie Blueprints fallen lassen können und sie dynamisch geladen werden. Dies ist der Code I (modifed von diesen tutorial)Flask Blueprint AttributeError: 'Modul' Objekt hat kein Attribut 'Name' Fehler
from flask import Flask
import pkgutil
import sys
app = Flask(__name__)
EXTENSIONS_DIR = "extensions"
modules = pkgutil.iter_modules(path=[EXTENSIONS_DIR])
for loader, mod_name, ispkg in modules:
if mod_name not in sys.modules:
# It imports fine
loaded_mod = __import__(EXTENSIONS_DIR+"."+mod_name+"."+mod_name, fromlist=[mod_name])
# It does not register
app.register_blueprint(loaded_mod)
Dies ist die Verzeichnisstruktur von meinem Projekt zu importieren bin verwendet. Im Verzeichnis extensions
geben Entwickler ihre erweiterte Funktionalität an.
/root
/extensions
/extension1
__init__.py
extension1.py
/extension2
__init__.py
extension2.py
simple_example.py
Das Problem ist, dass ich diesen Fehler bekomme und bin mir nicht sicher, was es mir sagt.
>python simple_example.py
Traceback (most recent call last):
File "simple_example.py", line 14, in <module>
app.register_blueprint(loaded_mod)
File "C:\Python27\lib\site-packages\flask\app.py", line 62, in wrapper_func
return f(self, *args, **kwargs)
File "C:\Python27\lib\site-packages\flask\app.py", line 880, in register_blueprint
if blueprint.name in self.blueprints:
AttributeError: 'module' object has no attribute 'name'
Eine einfache Erweiterung sieht wie folgt aus
from flask import Blueprint
extension1 = Blueprint('extension1', __name__)
@extension1.route("/my_route")
def treasure_list():
return "list of objects"
Wie kann ich die AttributeError
in einer Art und Weise zu lösen, die mein app.register_blueprint
Anruf erlaubt erfolgreich zu sein?
Ich bin eine sehr ähnliche Störung zu erhalten, es sei denn ich bin nur einen sehr grundlegenden Entwurf ohne irgendwelche dieses fancyness zu importieren versuchen, . –
@DavidCrook: Es bedeutet im Grunde genommen, dass Sie versuchen, etwas zu registrieren, das keine tatsächliche "Blueprint" -Instanz ist. Stellen Sie sicher, dass Sie das richtige Objekt übergeben. –