Python Dash如何通过for循环批量渲染多个页面元素?
问题分析与解决方法
核心错误点
- 循环内提前return终止执行:回调函数
p里的for循环在第一次迭代时就执行了return,直接终止函数并返回第一个元素,后续循环根本不会运行,所以仅能渲染第一条记录。 - 函数名不匹配:定义的生成元素函数是
createRegister,但回调中调用的是createReg,会触发NameError,必须统一函数名。
修正后的代码
x = ['Tom', 'Jerry', 'Math'] def createRegister(name): return dbc.Col([ html.P(f"{name}") ]) app.layout = dbc.Container([ dcc.Interval(id='interval_db', interval=86400000 * 7, n_intervals=0), dbc.Row([ ], id='row-teste') ], fluid=True) @app.callback( Output('row-teste', 'children'), [Input('interval_db', 'n_intervals')] ) def p(n_intervals): # 将所有生成的Col元素收集到列表中,最后统一返回 cols = [] for i in x: cols.append(createRegister(i)) return cols # 也可以用列表推导式简化写法: # return [createRegister(i) for i in x]
说明
修改后,回调会返回包含所有dbc.Col组件的列表,Dash会自动将列表中的所有元素渲染到row-teste对应的Row组件内,这样就能展示所有记录了。
内容的提问来源于stack exchange,提问作者bona.coder
相关产品推荐
相关产品推荐

