Flask结构 -- 无法从__init__.py导入应用程序
我刚开始学Python,最近在用__init__.py
设置我的应用结构时遇到了很多麻烦,虽然我查了好几个教程。
现在,我的目录结构大概是这样的:
/parent
/myapp
__init__.py
views.py
/virtualenv
之前,我的结构是这样的(如果有区别的话):
/parent
/myapp
/bin
/include
/lib
__init__.py
文件的内容如下:
from flask import Flask
app = Flask(__name__)
还有我的views.py文件:
from myapp import app
@app.route('/')
def test():
return 'This is a new test'
if __name__ == '__main__':
app.run(debug=True)
如果myapp
是通过init文件初始化的,为什么我在views里不能调用它呢?我收到一个错误提示,说明“我无法导入app,并且没有名为myapp的模块”。如果我把init文件删掉,把内容复制到views.py文件的顶部,一切就正常了。
1 个回答
10
你现在把 views
当成主要的脚本在用。可是,你不能把脚本放在一个包里面;它所在的目录不能被当作包来处理。Python 会把 parent/myapp
这个目录加到 Python 的路径中,而不是 parent
这个路径。
你需要在最上层(也就是和 myapp
同级)添加一个 单独 的脚本:
from myapp import app
if __name__ == '__main__':
app.run(debug=True)
然后在 __init__.py
文件里添加一行代码来导入你的视图:
from flask import Flask
app = Flask(__name__)
import views
最后,把 views.py
文件里的 if __name__ == '__main__':
这一块去掉。