如果您想在每次重新加载页面时重新加载布局,请执行以下操作:
app.layout = myfunction
注意:在没有括号的情况下调用我的函数,就像这样是错误的:
app.layout = myfunction()
但是如果我想调用传递参数的函数呢?
app.layout = myfunction????
我做了一个变通办法,创建了一个类似的伪函数
def serve_layout():
return layout(app) # I pass app to use app.callbacks
app.layout = serve_layout
然而
我收到了很多关于回调的错误,告诉我有重复的回调,但实际上没有。
错误:
In the callback for output(s):
information-container.style
Output 0 (information-container.style) is already in use.
Any given output can only have one callback that sets it.
To resolve this situation, try combining these into
one callback function, distinguishing the trigger
by using `dash.callback_context` if necessary.
我认为这个错误是因为我将应用程序作为参数传递(我需要这样做来管理每个组件的app.callbacks,因为我的应用程序非常大(,而且不知何故,这种类型的范式与Dash范式相冲突。
感谢提供的任何帮助
源代码:
import dash
from layout import layout # layout is where i define all layout logic/ components
def serve_layout():
return layout(app)
app = dash.Dash(__name__)
app.layout = serve_layout
app.title = 'Example app'
if __name__ == "__main__":
app.run_server(debug=True,
host='0.0.0.0')
使用当前代码,每次加载页面时都要注册回调,这就是为什么会出现错误。您应该将当前的serve_layout
函数拆分为两个函数,
- 一个
layout
函数(没有参数(,仅渲染布局 - 另一个函数,比如
callbacks
,它将app
作为参数并注册回调
然后应该使用等代码设置应用程序
...
app.layout = layout
callbacks(app)
...
是的,正如@emher所提到的。callbacks
是要去的函数。
此外,回调可以写成decorator来接受输入和输出,例如通过与应用程序中的一些元素交互来匹配值。
您可以在此处阅读Plotly
文档:
- https://dash.plotly.com/basic-callbacks
- https://dash.plotly.com/advanced-callbacks
通过搜索绘图回调,您还可以在SO上找到各种示例