我在我的应用程序中使用Flask BluePrint并且必须使用主要部分:1。Admin和2. Public。当我尝试将loginManager导入到views.py文件时,我收到错误 ImportError:无法导入名称lm
我的文件夹结构如下:
~/LargeApplication
|-- run.py
|-- config.py
|__ /env # Virtual Environment
|__ /app # Application Module
|-- __init__.py
|-- models.py
|-- /admin
|-- __init__.py
|-- views.py
|__ /templates
|-- ..
|__ ..
|__ .
我在__ init__ .py文件中初始化LoginManager() / app / __ init__ .py
from flask.ext.login import LoginManager
lm = LoginManager()
lm.init_app(app)
lm.login_view = 'login'
当我尝试在/app/admin/views.py中导入 lm
from app import lm
它引发了ImportError。
ImportError: cannot import name lm
你能告诉我这可能是什么问题吗?
答案 0 :(得分:6)
你可能有一个循环导入。这很好,但您需要考虑到您将使用尚未完成所有顶级指令的模块。
如果您有以下代码:
from flask.ext.login import LoginManager
from app.admin import admin_blueprint
lm = LoginManager()
lm.init_app(app)
lm.login_view = 'login'
然后app.admin
将在执行lm = LoginManager()
行之前导入; app.admin
中随后尝试解决app.lm
的任何代码都将失败。
将蓝图导入向下移动到您的模块,并且已经创建了lm
:
from flask.ext.login import LoginManager
lm = LoginManager()
lm.init_app(app)
lm.login_view = 'login'
from app.admin import admin_blueprint
请参阅Flask手册的“较大应用程序”文档部分中的Circular Imports note。