Я пытаюсь загрузить фрейм данных с помощью кнопки загрузки в приложении sh, но я не могу поместить logi c, где я могу вставить это в свой обратный вызов. Я генерирую фрейм данных на основе выбора пользователя и использую Dash_table.DataTable.
вот полный код:
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output, State
import dash_bootstrap_components as dbc
import datetime
import dash_table
from Dash_App.app import app
import pandas as pd
row1 = html.Div(
[
dbc.Row([
dbc.Col([
dbc.Input(id="ad_account_id",
type="text",
placeholder="Account ID",
style={'width': '150px'}),
]),
dbc.Col([
dbc.Input(id="app_id",
type="text",
placeholder="App ID",
style={'width': '150px'}),
]),
dbc.Col([
dbc.Input(id="access_token",
type="text",
style={'width': '150px'},
placeholder="Access Token")
]),
dbc.Col([
dbc.Input(id="app_secret",
type="text",
style={'width': '150px'},
placeholder="App Secret")
]),
dbc.Col([
dcc.Dropdown(
id='dimensions',
options=[{'label': i, 'value': i} for i in ['Campaign', 'Placement', 'Creative']],
multi=True,
style={'width': '150px'},
placeholder='Dimensions')
]),
dbc.Col([
dcc.Dropdown(
id='metrics',
options=[{'label': i, 'value': i} for i in ['Impressions', 'Clicks', 'Conversions']],
multi=True,
style={'width': '150px'},
placeholder='Metrics')
])
], align="center"),
], style={'margin-top': 20, 'margin-left': -100}
)
row2 = html.Div([
dbc.Row([
dbc.Col([
dcc.DatePickerSingle(
id='start-date',
placeholder="Start Date",
min_date_allowed=datetime.datetime.now().strftime('2018-01-01'),
max_date_allowed=datetime.datetime.today().date(),
display_format='YYYY-MM-DD',
style={'width': '150px', 'margin-left': 180}
),
], ),
dbc.Col([
# html.Br(),
dcc.DatePickerSingle(
id='end-date',
placeholder="End Date",
min_date_allowed=datetime.datetime.now().strftime('2018-01-01'),
max_date_allowed=datetime.datetime.today().date(),
display_format='YYYY-MM-DD',
style={'width': '150px', 'margin-left': 60}
)], align="center"),
])
])
row3 = html.Div([
dbc.Row([
dbc.Col([
html.Button(id='submit-button', type='submit', children='Submit', style={'width': '150px', 'margin-top': 5,
'margin-left': 370}),
], width={"order": "first"}),
dbc.Col([
html.Div(id='output_div'),
])
])
])
row4 = html.Div([
html.A(html.Button('Download Data', id='download-button'), id='download-link-facebook',
style={'width': '120px', 'margin-top': 10, 'margin-left': 345})
])
tab_1_layout = dbc.Container(children=[
row1,
html.Br(),
row2,
html.Br(),
row3,
row4
]
)
@app.callback(Output('output_div', 'children'),
[Input('submit-button', 'n_clicks')],
[State('ad_account_id', 'value'),
State('app_id', 'value'), State('access_token', 'value'),
State('app_secret', 'value'), State('dimensions', 'value'),
State('metrics', 'value'),
State('start-date', 'date'),
State('end-date', 'date'),
],
)
def update_output(clicks, ad_account_id, app_id, access_token, app_secret, dimensions, metrics, start_date, end_date):
if clicks is not None:
my_ad_account = ad_account_id
my_app_id = app_id
my_access_token = access_token
my_app_secret = app_secret
my_dimensions = dimensions
my_metrics = metrics
my_start_date = start_date
my_end_date = end_date
df = pd.read_csv('usa-agricultural-exports-2011.csv', encoding='ISO-8859-1')
new_df_col_list = my_dimensions + my_metrics
print(new_df_col_list)
dff = df[new_df_col_list]
return html.Div([
dash_table.DataTable(
css=[{'selector': '.row',
'rule': 'margin: 0; white-space: inherit; overflow: inherit; text-overflow: inherit;'}],
id='table',
columns=[{"name": i, "id": i} for i in dff.columns],
data=dff.to_dict("rows"),
style_cell={"fontFamily": "Arial", "size": 10, 'textAlign': 'left',
'width': '{}%'.format(len(dff.columns)), 'textOverflow': 'ellipsis', 'overflow': 'hidden'},
style_table={'maxHeight': '200px', 'overflowY': 'scroll', 'maxWidth': '1500px', 'overflowX': 'scroll'},
row_selectable="multi",
selected_rows=[],
editable=True,
style_header={'backgroundColor': '#ffd480', 'color': 'white', 'height': '10', 'width': '10',
'fontWeight': 'bold'},
style_data={'whiteSpace': 'auto', 'height': 'auto', 'width': 'auto'},
tooltip_data=[
{
column: {'value': str(value), 'type': 'markdown'}
for column, value in row.items()
} for row in dff.to_dict('rows')
],
tooltip_duration=None
),
], style={'margin-top': 30, 'display': 'inline-block', 'margin-left': 20, 'width': '100%'})