如何解决错误 Dash 无法在浏览器中加载数据(错误加载布局)
how can I resolve the error Dash can not load data in browser (error loading layout)
有不少帖子讨论过这个问题,但没有解决我的问题。问题是 运行 多页 dash 应用程序时浏览器中的 'error loading layout'。在终端我没有错误。
我的应用基于“迈向数据科学”一文:https://towardsdatascience.com/callbacks-layouts-bootstrap-how-to-create-dashboards-in-plotly-dash-1d233ff63e30
我已经重新安装了不同的模块并重新开始,结果都没有令人满意的结果。
我的代码是:
app.py
import dash
app = dash.Dash(__name__, suppress_callback_exceptions=True)
server = app.server
index.py
from dash import dcc
from dash import html
from dash import Output, Input
from app import app
from layouts import navbar
from layouts import layout_overview, layout_comparison, layout_analysis
app.config.suppress_callback_exceptions = True
app.layout = html.Div([
dcc.Location(id='url', refresh=False),
navbar(),
html.Div(id='page-content')
])
@app.callback(Output('page-content', 'children'),
[Input('url', 'pathname')])
def display_page(pathname):
if pathname == '/':
return layout_overview
elif pathname == '/overview':
return layout_overview
elif pathname == '/comparison':
return layout_comparison
elif pathname == '/analysis':
return layout_analysis
else:
return '404'
if __name__ == '__main__':
app.run_server(port='5000', host='127.0.0.1', debug=True)
layouts.py(建设中)
from dash import dcc
from dash import html
import pandas as pd
########################################
# Add Data
########################################
df = pd.read_csv('C:\Users\StefanSijbesmaDAAT\Documents\Scripting\Test\assets\Life expectancy.csv')
years = df['Year'].unique()
country=df['Entity'].unique()
########################################
# Create Auxiliary Components Here
########################################
def navbar():
html.Nav([ # navbar on top of the dashboard using html components
dcc.Link(
html.H4('Overview'),
href='/overview',
style={
'display': 'inline-block',
'margin-right': '30px'
}
),
dcc.Link(
html.H4('Comparison'),
href='/comparison',
style={
'display': 'inline-block',
'margin-right': '30px'
}
),
dcc.Link(
html.H4('Analysis'),
href='/analysis',
style={
'display': 'inline-block',
'margin-right': '230px'
}
),
], className='navbar'),
return navbar
########################################
# Create Page Layouts Here
########################################
### Layout Overview
layout_overview = html.Div('overview'
)
### Layout Comparison
layout_comparison = html.Div('comparison'
)
### Layout Analysis
layout_analysis = html.Div('analysis'
)
callbacks.py
还是空的
谁能给我指出正确的方向?
提前致谢。
问题出在 navbar()
函数中。它应该 return 一个元素,目前您正在 return 一个函数(因为您忘记将 html.Nav
元素分配给变量并 return 它)。
固定码:
def navbar():
navbar_element = html.Nav(
[ # navbar on top of the dashboard using html components
dcc.Link(
html.H4("Overview"),
href="/overview",
style={"display": "inline-block", "margin-right": "30px"},
),
dcc.Link(
html.H4("Comparison"),
href="/comparison",
style={"display": "inline-block", "margin-right": "30px"},
),
dcc.Link(
html.H4("Analysis"),
href="/analysis",
style={"display": "inline-block", "margin-right": "230px"},
),
],
className="navbar",
)
return navbar_element
还要小心,html.Nav()
定义后有逗号,这会导致函数 navbar
变成 return tuple
而不是一个元素。
此修复后,您在访问 http://127.0.0.1:5000
时将看不到布局,因为您的 display_page
回调需要访问 http://127.0.0.1:5000/
。所以这也是你可以改进的部分。
有不少帖子讨论过这个问题,但没有解决我的问题。问题是 运行 多页 dash 应用程序时浏览器中的 'error loading layout'。在终端我没有错误。
我的应用基于“迈向数据科学”一文:https://towardsdatascience.com/callbacks-layouts-bootstrap-how-to-create-dashboards-in-plotly-dash-1d233ff63e30
我已经重新安装了不同的模块并重新开始,结果都没有令人满意的结果。
我的代码是:
app.py
import dash
app = dash.Dash(__name__, suppress_callback_exceptions=True)
server = app.server
index.py
from dash import dcc
from dash import html
from dash import Output, Input
from app import app
from layouts import navbar
from layouts import layout_overview, layout_comparison, layout_analysis
app.config.suppress_callback_exceptions = True
app.layout = html.Div([
dcc.Location(id='url', refresh=False),
navbar(),
html.Div(id='page-content')
])
@app.callback(Output('page-content', 'children'),
[Input('url', 'pathname')])
def display_page(pathname):
if pathname == '/':
return layout_overview
elif pathname == '/overview':
return layout_overview
elif pathname == '/comparison':
return layout_comparison
elif pathname == '/analysis':
return layout_analysis
else:
return '404'
if __name__ == '__main__':
app.run_server(port='5000', host='127.0.0.1', debug=True)
layouts.py(建设中)
from dash import dcc
from dash import html
import pandas as pd
########################################
# Add Data
########################################
df = pd.read_csv('C:\Users\StefanSijbesmaDAAT\Documents\Scripting\Test\assets\Life expectancy.csv')
years = df['Year'].unique()
country=df['Entity'].unique()
########################################
# Create Auxiliary Components Here
########################################
def navbar():
html.Nav([ # navbar on top of the dashboard using html components
dcc.Link(
html.H4('Overview'),
href='/overview',
style={
'display': 'inline-block',
'margin-right': '30px'
}
),
dcc.Link(
html.H4('Comparison'),
href='/comparison',
style={
'display': 'inline-block',
'margin-right': '30px'
}
),
dcc.Link(
html.H4('Analysis'),
href='/analysis',
style={
'display': 'inline-block',
'margin-right': '230px'
}
),
], className='navbar'),
return navbar
########################################
# Create Page Layouts Here
########################################
### Layout Overview
layout_overview = html.Div('overview'
)
### Layout Comparison
layout_comparison = html.Div('comparison'
)
### Layout Analysis
layout_analysis = html.Div('analysis'
)
callbacks.py
还是空的
谁能给我指出正确的方向?
提前致谢。
问题出在 navbar()
函数中。它应该 return 一个元素,目前您正在 return 一个函数(因为您忘记将 html.Nav
元素分配给变量并 return 它)。
固定码:
def navbar():
navbar_element = html.Nav(
[ # navbar on top of the dashboard using html components
dcc.Link(
html.H4("Overview"),
href="/overview",
style={"display": "inline-block", "margin-right": "30px"},
),
dcc.Link(
html.H4("Comparison"),
href="/comparison",
style={"display": "inline-block", "margin-right": "30px"},
),
dcc.Link(
html.H4("Analysis"),
href="/analysis",
style={"display": "inline-block", "margin-right": "230px"},
),
],
className="navbar",
)
return navbar_element
还要小心,html.Nav()
定义后有逗号,这会导致函数 navbar
变成 return tuple
而不是一个元素。
此修复后,您在访问 http://127.0.0.1:5000
时将看不到布局,因为您的 display_page
回调需要访问 http://127.0.0.1:5000/
。所以这也是你可以改进的部分。