Я сейчас работаю над сайтом и использую python, да sh и bootstrap. Я делаю карты из bootstrap для сотен предметов. Проблема в том, что на каждой карточке есть кнопка редактирования, при нажатии на которую появляется модальная информация с этим элементом. Я понятия не имею, как создать один обратный вызов для каждого из этих элементов.
from collections import OrderedDict
import dash
import pandas as pd
import dash_bootstrap_components as dbc
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output, State
def card_maker(site_number):
return dbc.Card(
dbc.CardBody([
html.H4(site_number,style={'display':'inline-block'}),
dbc.Button("Edit", id="open-xl"+site_number, color="secondary", className="button-
style",style={'margin-right':'10px','display':'inline-
block','float':'right'}),
dbc.Modal(
[
dbc.ModalHeader(site_number),
dbc.ModalBody("Information"),
dbc.ModalFooter(
dbc.Button("Close", id="close-xl"+site_number, className="ml-auto"+site_number)
),
],
id="modal-xl" +site_number,
size="xl",
),
]
),
className="mb-3",
id = "card-" + site_number
)
cards = html.Div(
[
card_maker(site_number) for site_number in site_numbers #Site numbers is a list of unique numbers all of equal length
],
id = 'cards',
className="cards",
style={'padding-left':'150px','padding-right':'150px', "overflowY": "scroll", 'maxHeight': '650px'}
)
def toggle_modal(n1, n2, is_open):
if n1 or n2:
return not is_open
return is_open
for eng_num in site_numbers:
app.callback(
Output("modal-xl"+ num, "is_open"),
[Input("open-xl"+ num, "n_clicks"), Input("close-xl"+ num, "n_clicks")],
[State("modal-xl"+ num, "is_open")],
)(toggle_modal)
Я создал уникальные идентификаторы для каждой карты и каждой отдельной модели, и этот код работает, но только для небольшого количества карточек. Я буду работать с более чем 1000 карт на моем сайте.
Когда у меня более 100, сайт не загружается. Если у кого-то есть какой-либо код или идеи о том, как сделать несколько кнопок, подобных этой, которые все делают в основном одно и то же действие, то, пожалуйста, поделитесь им.