首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在页面重新加载时dash DataTable重置

在页面重新加载时dash DataTable重置
EN

Stack Overflow用户
提问于 2022-03-27 15:06:15
回答 1查看 994关注 0票数 1

下面的代码从CSV文件中读取一个简单的模型(3列50行),以便在我的(更大的)破折号应用程序中编辑表。编辑单元格时,会按预期将整个表写回文件。但是,重新加载页面会显示表,因为它最初是从文件中加载的,因此丢失了任何编辑。有关于如何在页面重新加载之间保持编辑的线索吗?

代码语言:javascript
复制
df_topic_list=pd.read_csv(model_file)

app.layout = html.Div([
    dcc.Store(id='memory-output'),
    html.Div([
        dash_table.DataTable(df_topic_list.to_dict('records'),
            id='memory-table',
            columns=[{"name": i, "id": i} for i in df_topic_list.columns],editable=True
        ),
    ])
])

@app.callback(Output('memory-output', 'data'),
              Input('memory-table', 'data'))
def on_data_set_table(data):
    pd.DataFrame(data).to_csv(model_file,index=False)
    return data

app.run_server(port=8052)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-28 15:55:40

当您刷新页面时,它不会再次运行所有代码,但它只会再次发送app.layout,它只生成一次,其中包含来自文件的原始数据。当您更新表格中单元格中的数据时,它只更新浏览器中的值(使用JavaScript),而不更新代码app.layout中的值。

但是它可以选择在浏览器内存中预置值,并且它应该在重新加载后使用这些值。

代码语言:javascript
复制
app.layout = html.Div([
    dcc.Store(id='memory-output'),
    html.Div([
        dash_table.DataTable(
            df_topic_list.to_dict('records'),
            id='memory-table',
            columns=[{"name": i, "id": i} for i in df_topic_list.columns],
            editable=True,

            persistence=True,           # <---
            persisted_props=["data"],   # <---

        )
    ])
])

这对我有用,但似乎有些人对此有意见。

见问题:Dash表编辑的数据不持久化.问题#684 .巧妙/破折号表

但我找到了其他方法来保存它。

我把表分配给分开的变量--即.table --在回调中,我在这个表中替换了table.data

代码语言:javascript
复制
from dash import Dash, Input, Output, callback
from dash import dcc, html, dash_table
import pandas as pd

model_file = 'data.csv'

df_topic_list = pd.read_csv(model_file)

app = Dash(__name__)

table = dash_table.DataTable(
            df_topic_list.to_dict('records'),
            id='memory-table',
            columns=[{"name": i, "id": i} for i in df_topic_list.columns],
            editable=True,
        )

app.layout = html.Div([
    dcc.Store(id='memory-output'),
    html.Div([table])
])

@app.callback(
    Output('memory-output', 'data'),
    Input('memory-table', 'data')
)
def on_data_set_table(data):
    pd.DataFrame(data).to_csv(model_file, index=False)

    table.data = data  # <--- replace data

    return data

app.run_server(port=8052)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71637511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档