我从中学习更大的应用 http://flask.pocoo.org/docs/0.10/patterns/packages/在这个文档中,它说:“所有视图函数(顶部带有route()装饰器的函数)都必须导入到init.py 文件。不是对象本身,而是它所在的模块。"
我不知道为什么当我这样做时应该:from . import views
,它成功了。虽然from views import *
也能很好的工作。
我这样组织这些文件:
myapplication/
runner.py
myflask/
__init__.py
views.py
templates/
static/
...
跑步者.py:
from testFlask import app
app.run()
myflask/__init__.py:
from flask import Flask
app = Flask(__name__)
from . import views # why this can work????
myflask/views.py:
from . import app
@app.route('/')
def index():
return 'Hello World!'
我运行它:
$ cd myapplication
$ python runner.py
运行这个 Flask 应用程序就可以了。不过我想知道为什么from . import views
可以解决这个问题圆导入烧瓶有问题吗?为什么医生说:不是对象本身,而是它所在的模块????
但是,当我这样做时:
#some_dir/
# application.py
# views.py
#application.py
from flask import Flask
app = Flask(__name__)
import views # it doesn't work
# from views import * # it works
app.run()
#views.py
from application import app
@app.route('/')
def index():
return 'Hello World!'
#run it
$ python application.py
这不起作用。
这是循环导入。但在您的情况下,可能有问题的变量(app)已经在导入的脚本中定义,因此导入只会导致第一个“app”实例被导入的“app”实例覆盖。这没有任何实际作用。
有关此循环导入情况的详细信息,请阅读此post https://stackoverflow.com/questions/22187279/python-circular-importing.
如果您想遵循大型烧瓶应用程序的模式,您应该查看蓝图 http://flask.pocoo.org/docs/0.10/blueprints/ and 应用工厂 http://flask.pocoo.org/docs/0.10/patterns/appfactories/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)