У меня есть приложение da sh, которое выглядит следующим образом ![enter image description here](https://i.stack.imgur.com/ZAfT7.png)
Я хочу добавить обратный вызов, который будет возвращать фрейм данных со всеми входами, которые я ввожу в эти поля ввода, когда я нажимаю кнопку Send
. Дело в том, что входные данные и их идентификаторы зависят от числа, введенного в текстовом поле отправки.
Как мне написать обратный вызов для этого? Вот мой код
import dash
import dash_core_components as dcc
import dash_html_components as html
import dash_bootstrap_components as dbc
from dash.dependencies import Output,Input, State
external_stylesheets = [
'https://codepen.io/chriddyp/pen/bWLwgP.css',
"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css",
"https://use.fontawesome.com/releases/v5.7.2/css/all.css"
]
import pandas as pd
import requests
needed_inputs = ['Year', 'Index', 'Value']
app = dash.Dash(__name__, external_stylesheets=[external_stylesheets, dbc.themes.BOOTSTRAP])
app.config.suppress_callback_exceptions = True
app.layout = html.Div([
dcc.Location(id='url', refresh=False),
html.Div([
html.Br(),
html.A('Home', href = '/menu-1', id='sidemenu-1'),
html.A('Menu', href = '/menu-2', id='sidemenu-2')
], className = 'sidenav'),
html.Div(id='page-content', className='main')
])
calc_layout = html.Div([
html.Br(),
html.Div([
dcc.Input(id='years-input', type='number', placeholder='Please enter years'),
html.Button(id='years-submit-button', n_clicks=0, children='Submit')
]),
html.Br(),
html.Div(id='calc-inputs', className='six columns'),
html.Br(),
html.Div([
html.Div(id='inputs-table', className='six columns')
], className = 'row')
])
@app.callback(
Output('calc-inputs', 'children'),
[Input("years-submit-button", 'n_clicks')],
[State('years-input', 'value')])
def show_inputs(n_clicks,value):
if(type(value) == int):
return [
html.Div(
[
dcc.Input(id=f'years-{i}-{j}', type='number', placeholder=f'{j}') for j in needed_inputs
]
) for i in range(value)
] + [html.Br(), html.Button(id='data-submit-button', children='Send', n_clicks=0)]
@app.callback(dash.dependencies.Output('page-content', 'children'),
[dash.dependencies.Input('url', 'pathname')])
def display_page(pathname):
if pathname == '/menu-1':
return calc_layout
if __name__=="__main__":
app.run_server(debug=True)