【问题标题】:Dash: Multi-page app with same data across pagesDash:跨页面具有相同数据的多页面应用程序
【发布时间】:2020-09-14 17:37:58
【问题描述】:

我正在按照 dash 文档中的指导创建多页应用程序:https://dash.plotly.com/urls

我的问题是数据总共包含四个数据帧,并且我的应用程序中的三个页面中的每一个都使用多个这些页面来可视化内容。我试图避免每次调用其中一个页面时重新加载数据帧。这可能吗?怎么样?

目前,我正在尝试首先使用 index.py 中的函数加载 df,然后加载其他页面:

df_fz, df_md, df_auf, df_mat = get_dfs()
from apps import app1, app2, app3

[...]

@app.callback(Output('page-content', 'children'),
              [Input('url', 'pathname')])
def display_page(pathname):
    if pathname == '/app1':
        return app1.layout
    elif pathname == '/app2':
        return app2.layout
    else:
        return app3.layout

app1 到 app3 中的每一个都使用数据帧,就好像它们是在脚本顶部加载的一样,但是由于未定义 df,因此此代码会引发错误。 app3 外观的一个最小示例:

layout = html.Div([
    html.H3('App 3'),
    dcc.Dropdown(
        id='app-3-dropdown',
        options=[
            {'label': 'App 3 - {}'.format(i), 'value': i} for i in [df_fz.Value]
        ]
    ),
    html.Div(id='app-3-display-value'),
])

@app.callback(
    Output('app-3-display-value', 'children'),
    [Input('app-3-dropdown', 'value')])
def display_value(value):
    return 'You have selected "{}" but in App 3'.format(value)

【问题讨论】:

    标签: python plotly plotly-dash


    【解决方案1】:

    尝试将您的数据框放在数据集文件夹中,并将它们连接到每个应用页面中。像这样的:

    PATH = pathlib.Path(__file__).parent
    DATA_PATH = PATH.joinpath("../datasets").resolve()
    df = pd.read_csv(DATA_PATH.joinpath("mydata.csv"))
    

    这是一个关于如何使用 Dash 创建多页应用程序的教程:

    https://youtu.be/RMBSQ6leonU

    【讨论】:

    • 嗨@Adam Schroeder,如果我使用sql来读取我的数据怎么办,我应该在这里放什么,是一样的吗?谢谢
    【解决方案2】:

    如果您使用来自https://dash.plotly.com/urls 的以下文件结构-

    - app.py
    - index.py
    - apps
       |-- __init__.py
       |-- app1.py
       |-- app2.py
    

    尝试这种在“app.py”文件中读取数据帧的方法。由于您的每个 'app1.py'、'app2.py'、'app3.py' 都使用这些数据帧,因此将 df 导入这些文件中,即在您的 'app1.py' 代码中:

    from app import app
    
    from app import df_fz, df_md, df_auf, df_mat
    

    其他文件也是如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      • 2019-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多