Flask Dash передает переменную, сгенерированную в обратном вызове, другому обратному вызову - PullRequest
0 голосов
/ 26 июня 2019

При обратном вызове кадр данных создается из пользовательских данных.Мне нужно использовать этот фрейм данных в другой функции, чтобы передать его пользователю.Я прочитал, что server.route может сделать это с помощью Flask SendFile, но я не могу получить доступ к кадру данных, поскольку не могу использовать глобальные переменные.

Я прочитал, что есть скрытый метод div, но я не знаюкак я могу получить доступ к html-свойству div изнутри python.

'' '

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

' ''

1 Ответ

0 голосов
/ 26 июня 2019

Вы можете вывести содержимое фрейма данных в формате JSON в children опору div с display='none'. Затем используйте другой обратный вызов с children этого div в качестве 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
...