मैं अजगर में वेब विकास के लिए काफी नया हूं और इस समय डैश-प्लॉटली एप्लिकेशन विकसित कर रहा हूं। एप्लिकेशन में ग्राफ में दिखाए गए डेटा के लिए एक विशिष्ट समय अंतराल का चयन करने के लिए उपयोगकर्ता के लिए एक ड्रॉपडाउन मेनू है। जब पृष्ठ को ताज़ा किया जाता है तो चयन स्पष्ट रूप से डिफ़ॉल्ट रूप से वापस आ जाता है। यह सरलीकृत कोड ड्रॉपडाउन सेटअप दिखाता है:

import dash_core_components as dcc

app = dash.Dash(__name__)
app.layout = html.Div(
    dcc.Store('memory-intervals', storage_type='session')
    dcc.Dropdown(
       id='time',
       options=get_intervals(),
       value=Interval.DAY.value,
       multi=False,
    ),
)

अभी के लिए मुझे जो समझ में आया, वह यह है कि मैं ब्राउज़र सत्र में डैश के स्टोर घटक के माध्यम से डेटा संग्रहीत कर सकता हूं। मैं इस तरह चयन स्टोर करने में कामयाब रहा:

@app.callback(
    Output('memory-intervals', 'data'),
    Input('time', 'value'),
)
def select_interval(interval):
    if interval is None:
        raise PreventUpdate

    return interval

तो मैं इस बिंदु पर फंस गया हूं ... पेज रीलोड के बाद स्टोर के डेटा को चयन मूल्य के रूप में कैसे सेट कर सकता हूं?

आपका अग्रिम में ही बहुत धन्यवाद!

1
el_bastard0 21 जुलाई 2021, 14:30

2 जवाब

सबसे बढ़िया उत्तर

आप डैश दृढ़ता सुविधा का उपयोग कर सकते हैं।

दस्तावेज़ीकरण के अनुसार:

दृढ़ता_प्रकार ('स्थानीय', 'सत्र', या 'स्मृति'; डिफ़ॉल्ट 'स्थानीय'): जहां लगातार उपयोगकर्ता परिवर्तन संग्रहीत किए जाएंगे:

स्मृति: केवल स्मृति में रखा जाता है, पृष्ठ ताज़ा करने पर रीसेट करें। यह के लिए उपयोगी है उदाहरण यदि आपके पास एक टैब्ड ऐप है, जो घटक को हटा देता है जब a भिन्न टैब सक्रिय है, और आप चाहते हैं कि आपके स्विच करने पर परिवर्तन जारी रहें टैब लेकिन ऐप को फिर से लोड करने के बाद नहीं।

स्थानीय: window.localStorage का उपयोग करता है। यह डिफ़ॉल्ट है, और रखता है उस कंप्यूटर पर उस ब्राउज़र के भीतर अनिश्चित काल के लिए डेटा।

सत्र: window.sessionStorage का उपयोग करता है। 'लोकल' की तरह डाटा रखा जाता है जब आप पृष्ठ को पुनः लोड करते हैं, लेकिन ब्राउज़र बंद करने पर साफ़ हो जाते हैं या ऐप को एक नए ब्राउज़र टैब में खोलें।

आपके उदाहरण में, यदि आपको केवल पुनः लोड करने के बाद ड्रॉपडाउन मान को संरक्षित करने की आवश्यकता है, लेकिन ब्राउज़र से बाहर निकलने या टैब बंद करने के बाद नहीं, तो आप लिख सकते हैं:

import dash_core_components as dcc

    app = dash.Dash(__name__)
    app.layout = html.Div(
        dcc.Store('memory-intervals', storage_type='session')
        dcc.Dropdown(
           id='time',
           options=get_intervals(),
           value=Interval.DAY.value,
           multi=False,
           persistence = True,
           persistence_type = 'session'
        ),
    )

हालांकि, अगर आपको उस कंप्यूटर पर उस ब्राउज़र के भीतर अनिश्चित काल तक चयन रखने की आवश्यकता है तो आप बस persistence = True का उपयोग कर सकते हैं क्योंकि 'स्थानीय' प्रकार डिफ़ॉल्ट है।

1
Dharman 14 सितंबर 2021, 13:10

मुझे नहीं पता कि यह सबसे अच्छा समाधान है या नहीं, लेकिन प्लॉटली डॉक्यूमेंटेशन के संबंध में मैं कामयाब रहा इसे इस तरह करो:

@app.callback(
    Output('time', 'value'),
    Output('memory-intervals', 'data'),
    Input('time', 'value'),
    Input('memory-intervals', 'data'),
    Input('memory-intervals', 'modified_timestamp'),
)
def select_interval(dd_interval, memory_interval, timestamp):
    ctx = dash.callback_context
    trigger_id = ctx.triggered[0]["prop_id"].split(".")[0]

    if trigger_id == 'time':
        interval = dd_interval
    elif timestamp == -1 or memory_interval is None:
        interval = Interval.DAY.value
    else:
        interval = memory_interval

    return interval, interval
0
el_bastard0 21 जुलाई 2021, 16:42