当应用程序作为参数传递时,每次重新加载页面时,如何在Python Dash中重新加载布局



如果您想在每次重新加载页面时重新加载布局,请执行以下操作:

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上找到各种示例

最新更新