【问题标题】:Flask Dash passing a variable generated in a callback to another callbackFlask Dash 将回调中生成的变量传递给另一个回调
【发布时间】:2019-06-25 22:17:19
【问题描述】:

在回调中,根据用户输入创建数据框。我需要在另一个函数中使用该数据框,以便将其提供给用户。 我读到 server.route 可以使用 Flask SendFile 执行此操作,但我无法访问数据框,因为我无法使用全局变量。

我读到有一个隐藏的 div 方法,但我不知道如何从 python 内部访问 html div 属性。

'''

server = flask.Flask('app')

app = dash.Dash(__name__,
external_stylesheets=external_css,
server=server)

master = pd.read_csv('master_dataframe.csv')

@server.route("/downloadable/")

def download_file():

    df = # The dataframe I need that is in the other function
    buffer = io.BytesIO()
    dff.to_excel(buffer)  # write to BytesIO buffer
    buffer.seek(0)
    return send_file(
        buffer,
        attachment_filename='data.xlsx',
        as_attachment=True,
        cache_timeout=0
    )
@app.callback(
    Output('plot_button','n_clicks_timestamp'),
    [Input('account_selector','value')]
)
def generate_layout(value):
    df = make_something(master, value)
    return html_layout

'''

【问题讨论】:

    标签: python flask plotly-dash


    【解决方案1】:

    您可以将数据帧的内容以 JSON 格式输出到带有display='none'divchildren 属性。然后使用另一个回调,将 divchildren 作为其 Input,您将能够读取 JSON 并使用该数据。

    快速示例:

    @app.callback(
        Output('my-hidden-div','children'),
        [Input('my-input','value')]  # whatever this will be
    )
    def generate_df_callback(value):
        df = make_df_from_input(value)
        return df
    
    
    @app.callback(
        Output('my-output', 'value'),  # whatever this will be
        [Input('my-hidden-div', 'children')]
    def use_df_callback(df):
        foo = do_something_with_df(df)
        return foo
    

    【讨论】:

    • 感谢您的回答。我可以在 server.route 装饰器之后使用这个回调吗?因为我需要在用户访问“/download/” url后发送文件
    • 我不太确定,因为我没有太多使用server.route 装饰器,但我认为答案是“否”,因为隐藏的 div 不会出现在该页面上。不过值得一试。如果它不起作用,您还可以查看将 JSON 输出到 local storage,无论路由如何,它都应该可用。
    • 你找到答案了吗?我正在尝试在我的应用程序中构建相同的过程。
    • 如果本地存储选项不起作用,那么我不确定。
    猜你喜欢
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多