Flask蓝图无法导入模块

时间:2017-01-31 21:58:37

标签: python python-2.7 flask

我正在为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,因为它需要处理路由。为什么这一行会导致导入问题,我将如何解决这个问题呢?

1 个答案:

答案 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('/')
...