2017-08-30 17 views
0

私は既存のFlask Webアプリケーションを持っています。既存のDashアプリ(a Plotly Flask app)を取り込みたいと思います。 Flask's documentation recommendsとして、私はこれを実現するためにthusly DispatcherMiddlewareを使用しています:FlaskのDispatcherMiddlewareがPlotlyのダッシュでうまくいきません

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/に向かうとき、私が上で表示されるように、エラーを次取得しますWebページ:私はCONSOに以下を参照してください

enter image description here

le log:

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 

ダッシュアプ​​リケーション用にレイアウトを正しく読み込むにはどうすればよいですか?

答えて

1

これは私がこの問題を克服した方法です。きわめて効果的ではありません。

あなたは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 /ニュース

/であなたのdash_appは/ mydashに答えるため

+0

感謝です。これは理にかなっていますが、それがうまく動作するかどうかもっと詳しく説明できますか?ちょっと興味があるんだけど。 –

+1

あなたのコードから、dash_dependenciesはサーバールート( '/')に 'left behind'であり、アプリケーションが存在するパス '/ dash'に移動せず、レイアウトのレンダリングが失敗します。 url_base_pathnameを指定すると、依存関係が指定されたパスに移動します。それが理にかなってほしい! – PeaceLeka

関連する問題