我正在尝试让我的登录页面与蓝图工作。在我将我的python包分成单独的包之前,该应用程序仅使用app.py就可以成功运行。然而,现在我试图让它更模块化,我在运行应用程序时遇到了问题,它不让我导入我创建的blueprint。
我的文件结构是这样的:
myapp/
run.py
myapp/
__init.py__
app.py
models.py
...这是我的run.py
from myapp import app
app.run(host= '0.0.0.0', debug=True)我在app.py中初始化蓝图,如下所示:
....
from flask import Blueprint
bp = Blueprint('bp', __name__)
@bp.route('/')
@bp.route('/home')
....我从__init.py__调用它,如下所示:
app = Flask(__name__)
....
app.config...
app.config...
app.config...
....
from . import bp # line 35
app.register_blueprint(bp)但是,无论我将导入更改为什么,它都会一直抱怨它不能导入
# python3 run.py
Traceback (most recent call last):
File "run.py", line 1, in <module>
from usb import app
File "/my/path/to/myapp/myapp/__init__.py", line 35, in <module>
from . import bp
ImportError: cannot import name 'bp'我甚至尝试将from . import bp更改为from myapp.app import bp,然后它抛出一个不同的错误AttributeError: module 'myapp.app' has no attribute 'register_blueprint'
下面是完整的错误:
Traceback (most recent call last):
File "run.py", line 1, in <module>
from myapp import app
File "/my/path/to/myapp/myapp/__init__.py", line 33, in <module>
app.register_blueprint(bp)
AttributeError: module 'myapp.app' has no attribute 'register_blueprint'有人知道我做错了什么吗?
发布于 2018-07-24 16:16:26
据我所知,您需要将from . import bp替换为from myapp.app import bp。发生这种情况是因为__init__.py,它使包从'myapp‘目录,和python等待包名称的导入路径。
下面是一个小示例:项目结构:
myapp\
myapp\
__init__.py
app.py
run.pyrun.py列表:
from myapp import app
app.run(host='0.0.0.0', debug=True)myapp\__init__.py列表:
from flask import Flask
from myapp.app import bp
app = Flask(__name__)
app.register_blueprint(bp)myapp\app.py列表:
from flask import Blueprint
@bp.route('/')
@bp.route('/home')
def home():
return '<html><body><h1>Hello, World!</h1></body></html>'发布于 2020-06-25 02:39:04
出现此错误的原因是,您在调用bp实例时没有先加载它。当python解释器尝试加载路由时,例如:
# app/catalog/routes.py
from app.catalog import bp
@bp.route('/')
def hello():
return "hello world"并且验证bp实例还没有被加载,则它返回错误,描述它还没有找到bp模块。
因此,为了解决这个问题,在蓝图配置文件中,必须在注册蓝图之后调用路由。示例:
# app/catalog/__init__.py
from flask import Blueprint
bp = Blueprint('main', __name__, template_folder='templates')
from app.catalog import routeshttps://stackoverflow.com/questions/51489448
复制相似问题