无法在Flask中导入LoginManager()

时间:2014-05-25 12:23:35

标签: python login flask

我在我的应用程序中使用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

你能告诉我这可能是什么问题吗?

1 个答案:

答案 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