我有一个现有的Flask网络应用程序,我想将现有的Dash应用程序(a Plotly Flask app)合并到其中。作为Flask's documentation recommends,我正在使用DispatcherMiddleware
来实现这一目标:
flask_app = Flask(__name__) # App with both apps attached to it
app = Flask(__name__) # Existing Flask App
dash_app = Dash(__name__) # Dash app
dash_app.config.supress_callback_exceptions = True
# Use DispatcherMiddleware to route separate apps into one
flask_app.wsgi_app = DispatcherMiddleware(app, {'/dash': dash_app.server})
我们最终运行flask_app
:
if __name__ == "__main__":
flask_app.run(debug=True)
但是,当我前往127.0.0.1:<port>/dash/
时,我会在网页上显示以下错误:
我在控制台日志中看到以下内容:
127.0.0.1 - - [30/Aug/2017 11:11:02] "GET /dash HTTP/1.1" 301 -
127.0.0.1 - - [30/Aug/2017 11:11:02] "GET /dash/ HTTP/1.1" 200 -
127.0.0.1 - - [30/Aug/2017 11:11:03] "GET /_dash-layout HTTP/1.1" 404 -
127.0.0.1 - - [30/Aug/2017 11:11:03] "GET /_dash-dependencies HTTP/1.1" 404
如何才能为我的Dash应用程序正确加载布局?
答案 0 :(得分:3)
这就是我克服这个问题的方法。不是很好但很有效。
你需要run.py:
from werkzeug.wsgi import DispatcherMiddleware
from werkzeug.serving import run_simple
from server import server
from dash_app import app as app1
from flask_app import app as app2
app = DispatcherMiddleware(server,
{'/myflaskapp': app2})
if __name__ == '__main__':
run_simple('localhost', 5000, app, use_reloader=True)
您的server.py将如下所示:
from flask import Flask, render_template
server = Flask(__name__)
@server.route('/')
def server_root():
return render_template('index.html')
你的dash_app.py:
import dash
from server import server
app = dash.Dash(name='mydash', sharing=True, server=server, url_base_pathname='/mydash')
最后你的flask_app.py:
from flask import Flask
app = Flask(__name__)
@app.route("/news")
def news():
return render_template('news.html')
您的flask_app位于/ myflaskapp / news
您的dash_app位于/ mydash