在烧瓶中运行 dash 应用程序

Posted

技术标签:

【中文标题】在烧瓶中运行 dash 应用程序【英文标题】:Run a dash app inside a flask 【发布时间】:2018-10-25 22:39:56 【问题描述】:

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

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

【问题讨论】:

你检查过this question吗? 我有,但我不明白答案。我尝试实现它们,但我不知道我在做什么,我的代码失败了。 不要查看顶部的答案,查看this one 和this one。还要检查Dash deployment docs 上的 Dash 和 Flask 部分。 我已经完全做到了,但我收到以下错误 'NoneType' object has no attribute 'traverse' 我认为 Flask 视图应该总是返回 None 以外的东西。在您的第一个解决方案中,尝试返回类似 "Dash app is running !" 的字符串 【参考方案1】:

我认为您的问题是您从未真正构建过 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”之外,每个页面应该看起来相同。

【讨论】:

抱歉,我不明白您设置布局或创建 dash.Layout( ) 的意思。同样从您的示例中,如果破折号应用程序(第 6-8 行)位于另一个 .py 中,例如我的示例,我将如何调用它?谢谢 @FsimulatorX a dash.Layout() 是您开始实际构建 dash 应用程序的方式。它只是 HTML 元素。 Dash 应用程序只是一个网页,因此它需要 HTML 元素来呈现。 嗨@alkasm,我正在使用您在此处描述的方法,并且导航正在工作......有点。当我点击我的关于链接时,搜索栏中的 url 会更新,但只有当我刷新页面时,我才能看到我的关于页面。知道是什么原因造成的吗?

以上是关于在烧瓶中运行 dash 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

类型错误:%d 格式:需要一个数字,而不是 Dash

DASH 实时烛台图表不会更新,websocket,sqlalchemy,flask 应用程序

为啥在 gunicorn 上运行的烧瓶应用程序中使用日志轮换时同时在多个文件上写入日志?

如何使用任务命中在 azure 批处理节点中运行的烧瓶应用程序?

在 VScode 调试器中更改烧瓶运行端口

无法使用 nginx 运行烧瓶 wsgi 应用程序