3

当我转到特定的 url '/dash' 时,我希望能够从我的烧瓶应用程序运行我的 dash 应用程序。但是我收到以下错误。'TypeError:视图函数没有返回有效响应。该函数要么返回无,要么在没有返回语句的情况下结束。

烧瓶应用程序

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' object has no attribute 'traverse'

4

1 回答 1

0

我认为您的问题是您从未真正构建过 Dash 应用程序。我遇到了与您的代码相同的错误,但实际上构建 Dash 应用程序(即设置Layout)似乎可以解决问题。请注意,错误回溯特别显示 Dash 未能遍历您的布局,因为没有。尝试为它创建一个dash.Layout()解析,以便它有一些服务。Dash 的 GitHub 上对issue #220的回答提到了同样的错误和解决方案。

对于 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 App”,而host:port/dashapp应该显示标题“Dash App”。

于 2018-05-16T09:11:10.600 回答