我正在尝试使用输入在Web上创建仪表板表格。但是问题是,数据是通过回调和先验从数据库创建的,
除非使用回调函数创建DataFramework,否则我不知道列的名称。
我已经检查了我是否得到了正确的数据。但是,我们无法显示它。我使用了多个输出选项(使用破折号0.41)
我的代码如下所示:(我没有提供在回调someFunc中生成熊猫数据帧的函数的详细信息,
因为这对于本破折号代码的故障排除并不重要
将破折号表作为dt导入
def someFunc(ID、模式描述、文件路径):
##做点什么
返回df#数据帧
#
外部样式表=['https://codepen.io/chriddyp/pen/bWLwgP.css']
app=dash.dash(名称,外部样式表=外部样式表)
server=app.server
app=dash.dash(_名称__)
app.config.suppress\u callback\u exceptions=True
app.css.config.service_locally=True
app.scripts.config.service_locally=True
app.layout=html.Div(
儿童=[
html.Div(
id='标题',
children=appTitle,
className='titleDiv'
),
html.Div(
儿童=[
html.Div(
children=“输入ID:”,
className='textDiv'
),
dcc.输入(
id='id',
类型='text',
值='ABCER1',
尺寸=8),
html.Div(
children=“输入测试模式”,
className='textDiv'
),
dcc.输入(
id='pattern_desc',
类型='text',
值='Sample',
尺寸=20),
html.Div(
children=“输入文件输出路径:”,
className='textDiv'
),
dcc.输入(
id='文件路径',
类型='text',
值=“”,
尺寸=30),
按钮(
id='提交',
n_=0,
children='Search'
)
]
),
html.Div(
id='tableDiv',
children=dash_table.DataTable(
id='表',
style_table={'overflowX':'scroll'},
样式为列表视图=真,
style_头={'backgroundColor':'white','fontWeight':
“粗体”},
),
className='tableDiv'
)
]
)
#回调以更新表
@app.callback([输出('table','data'),输出('table','columns'))
[输入('submit','n_clicks')],
[状态('ID','value'),状态('pattern_desc','value'),
状态(“文件路径”、“值”)])
def更新表格(n_点击、ID、模式描述、文件路径):
df=someFunc(ID、模式描述、文件路径)
mycolumns=[{'name':i,'id':i}表示df.columns中的i]
返回html.Div([
数据表(
id='table',
columns=mycolumns,
数据=df.to_dict(“行”)
)
])
因此,在本例中,接受3个输入参数的函数someFunc返回一个数据帧,该数据帧可以根据输入具有不同的列。因此,应用程序布局应该显示
回调函数的输出根据输入动态给出的列。
我应该用表格和列填充网页,但得到的是一个错误。当我运行此操作时,我将通过函数生成的数据获取到文件中,但dash无法
已在网页上生成表。我收到以下错误:
dash.exceptions.InvalidCallbackReturnValue:回调..table.data..table.columns..是一个多输出。
输出类型应为列表或元组,但得到了Div([DataTable(columns=[{‘name’:’pattern\u desc’,’id’:’pattern\u desc’},…。
我不知道怎样才能做到。任何帮助都将不胜感激
在仪表板回调中,您应该向两个单独的输出返回两个单独的值:
[输出('table','data'),输出('table','columns')]
您将返回:
返回html.Div([
数据表(
id='table',
columns=mycolumns,
数据=df.to_dict(“行”)
)
])
只有1个输出
Dash希望列表或元组中有2个返回值,如下所示:
返回(“output1”,outputVariable2)
或
返回[Html.Div(“文本”),“输出文本2”]
为了解决此问题,可以在元组或列表中返回2个值,或者编辑输出要求,以便只需要一个值
从外观上看,您试图返回一个包含Datatable的Div,因此您可以只做以下更改:
html.Div(
id='tableDiv',
className='tableDiv'
)
...
@app.callback([输出('tableDiv','children')]
[输入('submit','n_clicks')],
[状态('ID','value'),状态('pattern_desc','value'),
状态(“文件路径”、“值”)])
def更新表格(n_点击、ID、模式描述、文件路径):
df=someFunc(ID、模式描述、文件路径)
mycolumns=[{'name':i,'id':i}表示df.columns中的i]
返回html.Div([
数据表(
id='table',
columns=mycolumns,
数据=df.to_dict(“行”)
)
])