As I wrote in topic - is there a way to catch that someone pressed F5? I need it to trigger the method.
If you make your layout to be a callable (function), then it is called every time the layout is created (every time the page is refreshed). So, instead of
layout = html.Div()
app.layout = layout
use
def get_layout():
layout = html.Div()
call_some_extra_function()
return layout
# Note: Not get_layout()
app.layout = get_layout
Thanks for response. Unfortunately - it doesn’t work for me. I have to add something to app.layout.children. So - it doesn’t exist during execution of get_layout()
Idea looks very well, so how to invoke my method after layout is assigned to app.layout?
What do you mean by having to add something to app.layout.children?
So I have app with hardcoded basic layout - few dcc.tabs. User can add new ones,then these are serialized and saved (in json). I do it by app.layout.children+=[newTab] and rest of functions. When I refresh page these tabs vanishing (but they are in json). When I shutdown app and restard these pages are loaded from json and they’re visible in layout.
What is the data type of newTab
? Some dash component? Are you doing this inside a callback? Where is the “json” saved? Is the app going to be serving multiple users at the same time?
Just one user, I add dcc.Tab to layout, but I have also a function which returns object of my own class Tab (generally it’s html.div) if you click on one of dcc.Tab from layout. Yes, I do it in callback -json is saved in file in this same callback.
Do I understand this correctly:
- App layout is created using app.layout = get_my_layout()
- User presses button which is tied to a callback
- Callback modifies app.layout.children. Something is added to
<div id=mydiv>
Why it could not be
- App layout is a function app.layout = get_my_layout
- User presses button which is tied to a callback
- Callback Output is put to
<div id=mydiv>
?
Yeah, I append straight to div instead append to children -and it’s okay. But app.layout = get_my_layout() is not invoked when user refresh a page
If you’re trying to have the layout to be reloaded every time the page is refreshed, you have to have callable
(function) as app.layout
So, instead of
app.layout = get_layout()
it should be
app.layout = get_layout
Thanks a lot! It works!