python-3.x - Python烧瓶蓝图ImportError:无法导入名称'bp'
问题描述
我正在尝试让我的登录页面使用蓝图。在我将我的 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'
有谁知道我在这里做错了什么?
解决方案
据我了解,您需要将 from 替换为from . import bp
to
from myapp.app import bp
。发生这种情况的原因是__init__.py
,它使包来自“myapp”目录,并且 python 等待带有包名的导入路径。
这是一个小例子:项目结构:
myapp\
myapp\
__init__.py
app.py
run.py
run.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>'
推荐阅读
- python - 如何适当地勾勒出 django-duo-auth 的路径?
- c# - 通过 id-array 以通用方式将子实体附加到父实体
- java - 将 Boomi JMS 连接器配置到 ActiveMQ Artemis
- django - 按方法排序不适用于查询集
- python - 用于摄取数据集并拆分为具有单独名称的较小数据集的功能?
- python - scipy.cluster.hierarchy.dendrogram():truncate_mode='level' 到底是做什么的?
- mysql - 在 laravel 的主类别中显示子类别
- scala - 是否有任何等效于 TypeScript 的 Partial
输入斯卡拉? - python - Python Zip函数翻转第一个和第二个列表?
- visual-studio-code - 设法通过终端连接,但不能通过远程资源管理器