首页 > flask蓝本

flask蓝本

再看flask web开发一书,里面有两段代码
app/main/__init__.py:

from flask import Blueprint

main = Blueprint('main', __name__)

from . import views, errors

app/main/errors.py:

from . import main

在知乎看到如下理解
from . import XXX是在当前程序所在文件夹里__init__.py程序中导入XXX,
想导入的函数不在当前文件夹,那么就有可能用到 from .. import XXX(即上一个文件夹中的__init__.py),或者from ..A import XXX(即上一个文件夹中的文件A)

问题1:书中在__init__.py中使用这样的写法要怎么样理解,__init__.py中并没有views, errors。
问题2:为什么在__init__.py中将from . import views, errors放到最后就不会循环导入

补充问题2:是不是因为errors.py中的from . import main只是从__init__.py中导入那个蓝本对象,只要导入完了那个蓝本,接下来的代码就不会运行和导入,所以就不会运行被放在最后的from . import views, errors

回答1:
'from . import XXX'是在当前程序所在文件夹里__init__.py程序中导入XXX
这句话表述有误,应该为在当前__init__.py所在的文件夹下导入XXX,可以看到__init__.py在main文件夹下,同层级的还有errors.py,forms.py,views.py,因此用相对引用可以导入,from . import views, errors

回答2:
因为views.py 和 errors.py要导入main blueprint,我们要等到main被创建出来才能够导入路由和错误处理。
如果先导入view.py和errors.py,而这两个需要等待main blueprint,此时main还未被创建,就形成了循环依赖。


1个是绝对引用,另1个是相对引用的。

【热门文章】
【热门文章】