python是解释型语言,是边读代码,边运行哪行,所以容易出现循环导入的问题。在java是编译型语言,是先编译,后运行,一般不出出现这个问题。
例如下:
d1_route_variable.py,代码从上往下执行,到了第二行的时候导入urls,进入urls模块,urls模块从上往下执行,到第二行的时候导入app,又回到本模块中,然后继续从上往下执行,到第二行的时候导入urls,这样产生了循环导入。
from flask import Flask, request
from class_05_view import urls
app = Flask(__name__)
if __name__ == '__main__':
app.run(debug=True)
urls.py
from class_05_view import views
from class_05_view.d1_route_variable import app
app.add_url_rule('/', view_func=views.index)
app.add_url_rule('/cases', view_func=views.cases)
views.py
def index():
return 'index'
def cases():
return 'cases'
如何解决这个循环导入,就是在需要的时候再导入,不是把导入都放到最顶部,这样执行顺序就会发生变化,先执行app,再导入到urls,进入urls模块,从上往下执行,到了第二行的时候,导入app,又进入到主函数模块,从上往下执行,到了第5行的时候,拿到app继续往下执行,但是还存在一个问题,导入的模块并不是执行里面的代码,一般的情况下会执行里面的视图函数,但是这个urls里不是函数,所以app.add_url_rule('/', view_func=views.index)
app.add_url_rule('/cases', view_func=views.cases),执行不到,所以导致页面到不到。
from flask import Flask, request
app = Flask(__name__)
from class_05_view import urls
if __name__ == '__main__':
app.run(debug=True)
继续修改导入文件的方式
from flask import Flask, request
app = Flask(__name__)
from class_05_view.urls import *
if __name__ == '__main__':
app.run(debug=True)



