我正在为Flask学习蓝图,但我在导入正确的模块时遇到了麻烦。这是我的设置:
文件夹结构:
- app.py
templates/
nomad/
- __init__.py
- nomad.py
app.py
from flask import Flask
from nomad.nomad import nblueprint
app = Flask(__name__)
app.register_blueprint(nblueprint)
nomad.py
from flask import render_template, Blueprint, abort
from app import app
nblueprint = Blueprint('nblueprint', __name__, template_folder='templates')
# Routes for this blueprint
@app.route ....
__init__.py
为空
我得到的错误:ImportError: cannot import name nblueprint
。我知道我的导入声明可能是错误的,但它应该是什么以及为什么?
修改:
如果我删除了from app import app
,那么我可以在app.py中成功导入nblueprint
。但是我需要在nomad.py中app
,因为它需要处理路由。为什么这一行会导致导入问题,我将如何解决这个问题呢?
答案 0 :(得分:2)
蓝图用于定义应用程序路径,因此您无需在同一位置使用应用程序实例和蓝图进行路由定义。
#nomad.py
@nblueprint.route('/')
您收到错误是因为在您使用应用实例的同时注册蓝图时。正如您所说,当您删除from app ...
时它会解决问题。
推荐的方法是在示例nomad
包中的蓝图包中定义您的蓝图视图,它应该是这样的:
...
nomad/
__init__.py
views.py
#nomad/__init__.py
nblueprint = Blueprint(...)
#nomad/views.py
from . import nblueprint
@nblueprint.route('/')
...