TL; DR : загрузка, вызванная обратным вызовом кнопки в приложении python3 Da sh, начинается только после второго щелчка. Не в первый раз ..
Full : я новичок в создании веб-приложений с Da sh в Python3 .8, и я хотел бы, чтобы мое приложение загрузило Excel файл после нажатия кнопки. В идеале, когда загрузка начинается, на кнопке также должен отображаться цвет success
. Следовательно, я использую несколько Output
с n_clicks
как Input
. С базовым фрагментом кода я получаю следующее поведение моего приложения:
- 1-й щелчок: кнопка становится зеленой (
success
) - нет начинается загрузка - 2-й щелчок: теперь начинается загрузка (или открывается окно загрузки) - кнопка остается зеленой
- 2> щелчки: окно загрузки открывается при каждом нажатии, кнопка остается зеленой (или обновляется, не уверен)
Это не то поведение, которого я ожидал, я бы хотел начать загрузку уже после первого щелчка! У меня есть этот фрагмент кода в моем макете da sh:
html.Div(
id="select-upload-form",
style={
"width": "100%",
"marginBottom": "1rem",
"justifyContent": "center",
"alignItems": "center",
"verticalAlign": "middle",
"textAlign": "center",
},
children=[
dbc.Button(
"Download the upload form",
id="download-excel",
color="secondary",
external_link="true",
target="",
href="",
),
],
),
и следующий обратный вызов:
@app.callback(
[
Output("download-excel", "href"),
Output("download-excel", "color"),
Output("download-excel", "target"),
],
[Input("download-excel", "n_clicks")],
)
def download_excel_file(n_clicks):
if n_clicks:
excelfile = write_excel_file() # creates an excel file using Pandas
excelfile.seek(0)
media_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
data = base64.b64encode(excelfile.read()).decode("utf-8")
href_data = f"data:{media_type};base64,{data}"
return href_data, "success", href_data,
else:
return None, "secondary", None