18
18
DEFAULT_VIEWS_MODULE = "dash_entrypoints.views"
19
19
20
20
21
- def _do_register_module_as_page ( app_name = None , layout_file = None , views_imported = None ):
21
+ def import_layout_function ( layout_file = None , views_imported = None ):
22
22
layout_name = layout_file .name .replace (".py" , "" )
23
23
layout_path = layout_name .replace ("__" , "/" )
24
24
page = importlib .import_module (f"{ views_imported .__package__ } .{ layout_name } " )
25
25
if hasattr (page , "layout" ):
26
+ return page .layout , layout_name , layout_path
27
+ else :
28
+ return None , None , None
29
+
30
+
31
+ def _do_register_module_as_page (app_name = None , layout_file = None , views_imported = None ):
32
+ page_layout , layout_name , layout_path = import_layout_function (
33
+ layout_file = layout_file , views_imported = views_imported
34
+ )
35
+ if page_layout is not None :
26
36
dash .register_page (
27
37
module = layout_name ,
28
38
title = f"{ app_name } : " + layout_path ,
29
39
name = layout_name ,
30
- layout = page . layout ,
40
+ layout = page_layout ,
31
41
path = "/" + layout_path ,
32
42
top_nav = True ,
33
43
)
@@ -49,21 +59,24 @@ def register_page_layouts(
49
59
layout_paths = sorted (Path (views_imported .__path__ [0 ]).rglob ("*.py" ))
50
60
layout_files = [lay for lay in layout_paths if not lay .name .startswith ("__" )]
51
61
52
- if register_blank_frontpage :
53
- dash .register_page (
54
- module = "" ,
55
- title = app_name ,
56
- name = "" ,
57
- layout = lambda layout : html .Div (),
58
- path = "/" ,
59
- top_nav = True ,
60
- )
61
- else :
62
- # Try to find front page in modules __init__
63
- frontpage_file = [lay for lay in layout_paths if lay .name .startswith ("__" )][0 ]
64
- _do_register_module_as_page (
65
- app_name = app_name , layout_file = frontpage_file , views_imported = views_imported
66
- )
62
+ def empty_layout ():
63
+ return html .Div ()
64
+
65
+ frontpage_file = [lay for lay in layout_paths if lay .name .startswith ("__" )][0 ]
66
+ front_page_layout , layout_name , layout_path = import_layout_function (
67
+ layout_file = frontpage_file , views_imported = views_imported
68
+ )
69
+ front_page_layout = (
70
+ front_page_layout if front_page_layout is not None else empty_layout
71
+ )
72
+ dash .register_page (
73
+ module = "" ,
74
+ title = app_name ,
75
+ name = "" ,
76
+ layout = empty_layout if register_blank_frontpage else front_page_layout ,
77
+ path = "/" ,
78
+ top_nav = True ,
79
+ )
67
80
68
81
# Register other views
69
82
for layout_file in layout_files :
@@ -94,7 +107,7 @@ def get_app(
94
107
95
108
96
109
def add_base_layout (app = None , app_name = None , ** kwargs ):
97
- """
110
+ """Add base layout including navigation bar with page links.
98
111
99
112
:param app:
100
113
:param app_name:
@@ -110,7 +123,7 @@ def add_base_layout(app=None, app_name=None, **kwargs):
110
123
# Use row and col to control vertical alignment of logo / brand
111
124
dbc .Row (
112
125
[
113
- # dbc.Col(html.Img(src=PLOTLY_LOGO, height="30px")),
126
+ # dbc.Col(html.Img(src=PLOTLY_LOGO, height="30px")), # TODO: add app_name as image
114
127
dbc .Col (dbc .NavbarBrand (app_name , className = "ms-2" )),
115
128
],
116
129
align = "center" ,
@@ -119,21 +132,15 @@ def add_base_layout(app=None, app_name=None, **kwargs):
119
132
href = f"http://{ kwargs .get ('ip_address' )} :{ kwargs .get ('port' )} " ,
120
133
style = {"textDecoration" : "none" },
121
134
),
122
- # dbc.DropdownMenu(
123
- # [
124
- # dbc.DropdownMenuItem(page["name"], href=page["path"])
125
- # for page in dash.page_registry.values()
126
- # if page["module"] != "pages.not_found_404"
127
- # ],
128
- # nav=True,
129
- # label="main dropdown",
130
- # ),
131
135
dbc .NavbarToggler (id = "navbar-toggler" , n_clicks = 0 ),
132
136
dbc .Collapse (
133
137
dbc .Nav (
134
138
[
135
139
dbc .NavLink (
136
- str (page ["name" ]).capitalize ().replace ("__" , "/" ),
140
+ str (page ["name" ])
141
+ .capitalize ()
142
+ .replace ("__" , "🠖" )
143
+ .replace ("_" , " " ),
137
144
href = page ["path" ],
138
145
)
139
146
for page in dash .page_registry .values ()
0 commit comments