Запустите приложение Dash внутри колбы - PullRequest
0 голосов
/ 16 мая 2018

Я хочу иметь возможность запускать мое приложение-черту из моего приложения фляги, когда я иду по определенному URL '/ dash'.Однако я получаю следующую ошибку.'TypeError: функция просмотра не вернула правильный ответ.Функция либо вернула None, либо завершилась без оператора return. '

flaskapp.py

app = Flask(__name__)

@app.route('/')
def index():
    return 'Welcome!'

@app.route('/dash')
def dash_chart():
    dashapp.start() # Run the dash app

if __name__ == "__main__":
    app.run(debug=True)

dashapp.py

def start():
    app = dash.Dash()
    app.layout = html.Div('Hello World')
    if __name__=='__main__':
        app.run_server(debug=True)

Если я внесу следующие изменения в мой flaskapp.py,

server = flask.Flask(__name__)
app = dash.Dash(__name__, server=server, url_base_pathname='/dashapp') #Results in an error

@server.route('/')
def index():
    return 'Welcome!'

@server.route('/dash')
def dash_chart():
    return flask.redirect('/dashapp')

if __name__ == "__main__":
    server.run(debug=True)

Я получаю следующую ошибку, AttributeError: у объекта 'NoneType' нет атрибута 'traverse'

1 Ответ

0 голосов
/ 16 мая 2018

Я думаю, что ваша проблема в том, что вы никогда не создавали приложение Dash. Я получаю те же ошибки, что и ваш код, но на самом деле сборка приложения Dash (то есть установка Layout), похоже, решает проблему. Обратите внимание, что трассировка ошибок специально показывает, что Dash не может перебрать ваш макет, потому что его нет. Попробуйте создать dash.Layout() для анализа, чтобы у него было что служить. Ответ на вопрос № 220 на Dash's GitHub упоминает ту же ошибку и решение.

Для MCVE:

import dash
import dash_html_components as html
import flask

server = flask.Flask(__name__)
app = dash.Dash(__name__, server=server, url_base_pathname='/dashapp')
app.layout = html.Div(children=[
    html.H1(children='Dash App')])

@server.route('/')
def index():
    return '''
<html>
<div>
    <h1>Flask App</h1>
</div>
</html>
'''

if __name__ == '__main__':
    server.run(debug=True)

Каждая страница должна выглядеть одинаково, за исключением того, что host:port/ должен отображать заголовок «Приложение Flask», а host:port/dashapp должен отображать заголовок «Приложение Dash».

...