Несколько входов для одного обратного вызова (да sh, python, bootstrap) - PullRequest
1 голос
/ 04 февраля 2020

Я сейчас работаю над сайтом и использую 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, сайт не загружается. Если у кого-то есть какой-либо код или идеи о том, как сделать несколько кнопок, подобных этой, которые все делают в основном одно и то же действие, то, пожалуйста, поделитесь им.

...