# Multiple input output and State in callback not working

**URL:** <https://community.plotly.com/t/multiple-input-output-and-state-in-callback-not-working/36388>\
**Category:** Dash Python\
**Created:** [March 19, 2020, 6:06am UTC](https://community.plotly.com/t/multiple-input-output-and-state-in-callback-not-working/36388 "2020-03-19T06:06:47Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![vinayakprabhu0](https://avatars.discourse-cdn.com/v4/letter/v/7ba0ec/32.png) [@vinayakprabhu0](https://community.plotly.com/u/vinayakprabhu0)\
**Post date:** [March 19, 2020, 6:06am UTC](https://community.plotly.com/t/multiple-input-output-and-state-in-callback-not-working/36388/1 "2020-03-19T06:06:47Z")

</div>

@app.callback(  
[Output(f"collapse\_"+df\_touchpoints[“Touchpoint”][i], “is\_open”) for i in range(0, 4)],  
[Input(f"collapse-button-"+df\_touchpoints[“Touchpoint”][i], “n\_clicks”) for i in range(1, 4)],  
[State(f"collapse\_"+df\_touchpoints[“Touchpoint”][i], “is\_open”) for i in range(0, 4)],  
)  
def toggle\_collapse(n1, n2, n3,n4, is\_open1, is\_open2, is\_open3,is\_open4):  
if n1 or n2 or n3 or n4:  
return not is\_open1,is\_open2,is\_open3,is\_open4  
return is\_open1,is\_open2,is\_open3,is\_open4

Error :  
DuplicateCallbackOutput:  
Multi output …collapse\_ Free.is\_open…collapse\_Paid.is\_open…collapse\_News.is\_open…collapse\_Radio.is\_open… contains an `Output` object  
that was already assigned.  
Duplicates:  
{‘collapse\_Paid.is\_open’, ‘collapse\_Free.is\_open’}

Any help will be appreciated

---

<div class="post-metadata">

**Author:** ![flyingcujo](https://avatars.discourse-cdn.com/v4/letter/f/e480ec/32.png) [@flyingcujo](https://community.plotly.com/u/flyingcujo)\
**Post date:** [March 19, 2020, 6:06pm UTC](https://community.plotly.com/t/multiple-input-output-and-state-in-callback-not-working/36388/2 "2020-03-19T18:06:45Z")

</div>

This shows that `collapse_Paid.is_open` and `collapse_Free.is_open` are already outputs of another callback. A component/parameter pair can only be an `Output` of **one** callback.

---

<div class="post-metadata">

**Author:** ![Emil](https://sea2.discourse-cdn.com/flex024/user_avatar/community.plotly.com/emil/32/31734_2.png) [@Emil](https://community.plotly.com/u/Emil)\
**Post date:** [March 25, 2020, 4:02pm UTC](https://community.plotly.com/t/multiple-input-output-and-state-in-callback-not-working/36388/3 "2020-03-25T16:02:17Z")

</div>

You can use the DashCallbackBlueprint class to enable assignment of multiple callbacks to a single output. Here is an example,

```auto
import dash
import dash_html_components as html
from dash.dependencies import Output, Input
from dash_extensions.callback import DashCallbackBlueprint

    
app = dash.Dash()
app.layout = html.Div([html.Button("Button 1", id="btn1"), html.Button("Button 2", id="btn2"), html.Div(id="div")])
dcb = DashCallbackBlueprint() 

@dcb.callback(Output("div", "children"), [Input("btn1", "n_clicks")])
def click_btn1(n_clicks):
    return "You clicked btn1"

@dcb.callback(Output("div", "children"), [Input("btn2", "n_clicks")]) 
def click_btn2(n_clicks):
    return "You clicked btn2"

dcb.register(app)  

if __name__ == ' __main__':
    app.run_server()

```

It can be installed by running

`pip install dash-extensions`

Otherwise, @flyingcujo is right; in pure Dash, you can only assign one callback to each output.
