我有一个烧瓶应用程序。
app.py
app = Flask(__name__)
from views import *
if __name__=="__main__":
app.run()
views.py
from app import app
@app.route('/')
def home():
return "Homepage"
因此,此处app.py
正在导入views.py
的所有内容,并且app
中定义的视图需要app.py
。但它仍然不会导致循环导入。为什么呢?
我使用以下方式运行此应用程序:
python app.py
答案 0 :(得分:4)
这看起来类似于Flask允许您在创建应用时执行的Larger Applications文档。
来自文档:
循环进口
每个Python程序员都讨厌它们,但我们只添加了一些:循环导入(这是两个模块相互依赖的时候。在这种情况下
views.py
取决于__init__.py
)。请注意,这一般是一个坏主意,但这里实际上很好。这样做的原因是我们实际上并没有使用__init__.py
中的视图,只是确保导入模块,我们在文件的底部进行操作。
答案 1 :(得分:0)
如果我们尝试遵循程序的功能,那就是:
app = Flask(__name__) # OK
from views import * # Goes into views.py
from app import app # Looks into app.py, finds it, import it
# Defines home
@app.route('/')
def home():
return "Homepage"
# import home and app, overriding app in app.py
# But views.app is the same as app.app, so it is still
# the same object
# Run main
if __name__=="__main__":
app.run()
我打赌它会计算出类似的东西。由于app是在导入之前定义的,所以没关系。