Если вы хотите избежать дополнительных вычислений для построения карт, которые вы не будете использовать, я бы предложил создать a, которая создает каждую карту и сохраняет эти функции в словаре. (Вы также можете создать универсальную функцию с параметрами, которые позволяют специфичность)
my_card_functions = {
'id_1': make_id_1,
'id_2': make_id_2,
}
Создание карты может быть сделано следующим образом:
my_id = 'id_1'
f = my_card_functions[my_id] # will break if id isn't registered
my_card = f()
Вы можете сохранить карты, которые вы хотите создать в объекте d cc .store . Вот пример кода, который вы могли бы рассмотреть:
# Pretend these are structured properly
dcc.Store(id='cards_data')
html.Div(id='my_cards',children=[])
@app.callback(
Output('my_cards','children'),
[Input('cards_data','data')],
[State('my_cards','children')]
)
def make_cards(data, children):
"""Makes cards for each id"""
if not data:
raise PreventUpdate
# The following code is not correct but serves as a demonstrative example
# Some data structure manipulation is necessary to access
# the ids from the children elements
children_ids = [x['id'] for x in children]
# Assuming your data looks something like this:
# {'add':['id_1','id_2']}
for x in data['add']:
if x not in children_ids:
f = my_card_functions[my_id]
my_card = f()
# Store values
children.append(my_card)
return children
Обратите внимание, что этот подход не разрешает удаление карточек. Это легко сделать, но, возможно, потребуется более динамичное c использование кэширования.