use*_*836 1 python flask python-2.7
我遇到了Flask的问题,其中导入模块中声明的路由没有注册,总是产生404.我在Python 2.7上运行最新版本的Flask.
我有以下目录结构:
run.py具有以下代码:来自flask导入Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
import views.home
if __name__ == '__main__':
app.run()
Run Code Online (Sandbox Code Playgroud)
home.py具有以下代码:
from run import app
@app.route('/test')
def test():
return "test"
Run Code Online (Sandbox Code Playgroud)
当我运行run.py
在home.py
(http:// localhost:5000/test)中声明的路由时,即使run.py
导入也总是返回404 views.home
.声明的根视图(http:// localhost:5000)run.py
工作正常.
我编写了一个函数,打印出所有已注册的路由和/ test不在那里(获取应用程序中定义的所有路由的列表).
知道为什么吗?
我发现run.py
从中切换import语句
import views.home
Run Code Online (Sandbox Code Playgroud)
至
from views.home import *
Run Code Online (Sandbox Code Playgroud)
使一切工作,这给了我关于为什么模块没有注册使用的线索import views.home
.
基本上,当run.py
作为脚本运行时,它被赋予名称__main__
,这是给模块的名称sys.modules
(导入模块:__ main__ vs import as module)
然后,当我输入的应用程式run.py
中views.home.py
的一个新实例run.py
被注册sys.modules
的名称run
.由于这一点上,参照app
在run.py
和views.home.py
是两个不同的引用不因此被注册的路由.
解决方案是将app
变量的创建移出run.py
并web_app.py
导入到导入的单独python文件(我称之为)中run.py
.这保证了app
内部声明的Flask 变量web_app.py
在web_app.py
导入的任何地方都始终正确引用.
所以run.py
现在看起来像这样:
from web_app import app
if __name__ == '__main__':
app.run()
Run Code Online (Sandbox Code Playgroud)
并且web_app.py
看起来是这样的:
from flask import Flask
app = Flask(__name__)
import view.home
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4553 次 |
最近记录: |