【问题标题】:Multi-Page Dash Application多页破折号应用程序
【发布时间】:2018-07-10 00:24:13
【问题描述】:

我正在尝试构建一个多页 Dash 应用程序。当我运行以下代码时,一切正常,除了它不会路由到我的 /dash_1 或 /dash_2 url。想知道是否有人可以帮助我。

我的结构是这样的:

破折号项目/ 应用程序1/ 应用程序.py

app2/ 应用程序.py

server.py 运行.py

我的 run.py 代码是

from app import server as application
from app import app

import app_1.dash_1
import app_2.dash_2

我的 app.py 代码是:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from werkzeug.wsgi import DispatcherMiddleware
import os
import pandas as pd
import dash
import flask

import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
import plotly.graph_objs as go
from analysis import *

server=flask.Flask(name)
app = dash.Dash(name)
app.config.suppress_callback_exceptions = True

app.css.append_css({
‘external_url’: ‘https://codepen.io/chriddyp/pen/bWLwgP.css’
})

我的 dash_1.py 代码是:

import dash 
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output 
import pandas as pd
import plotly.graph_objs as go
from analysis import * 

from app import app, server 

app = dash.Dash(name='dash_1', sharing=True, 
url_base_pathname='/dash_1', csrf_protect=False) 

app.config['suppress_callback_exceptions']=True

df = pd.read_csv('/Users/ds/app_1/main.csv')

layout = html.Div([
dcc.Graph(
    id='Senators ',
    figure={
        'data': [
            go.Scatter(
                x=df[df['candidate'] == i] 
['contributor_individual'],
                y=df[df['candidate_name'] == i]['contributor'],
                #z=df[df['candidate_name'] == i]['contributor'],
                text=df[df['candidate_name'] == i]['contributorl'],
                mode='markers',
                opacity=0.7,
                marker={
                    'size': 15,
                    'line': {'width': 0.5, 'color': 'white'}
                },
                name=i
            ) for i in df.candidate_name.unique()
        ],
        'layout': go.Layout(
            xaxis={'title': 'Contributor '},
            yaxis={'title': 'Contributor '},
            #margin={'l': 40, 'b': 40, 't': 10, 'r': 10},
            #legend={'x': 0, 'y': 1},
            hovermode='closest'
            )
        }
    )
])

layout = html.Div(children=[
html.H1(children='Senators '),

html.Div(children='''
    God Bless.
'''),

dcc.Graph(
    id='main.csv',
    figure={
        'data': [
        {'x':df['candidate'], 'y': df['sectorl'], 'type': 'bar'},
        {'x':df['candidate'], 'y': df['industry'], 'type': 'bar'},
        {'x':df['candidate'], 'y': df['contributor'], 'type': 'bar'},
        ],
        'layout': {
            'title': 'Let Them Eat...'
            }
        }
    )
])

我的 dash_2.py 代码是

import dash 
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import pandas as pd 

from app import app, server  

app = dash.Dash(name='dash_2', sharing=True, 
url_base_pathname='/dash_2', csrf_protect=False) 

app.config['suppress_callback_exceptions']=True 

df = pd.read_csv('/Users/ds/app_2/slice.csv')



layout = html.Div(children=[
html.H1(children='Bars'),

html.Div(children='''
    One Bite....
'''),

dcc.Graph(
    id='slice.csv',
    figure={
        'data': [
        {'x':df['Slice'], 'y': df['Score'], 'type': 'bar'},
        ],
        'layout': {
            'title': 'Bars'
            }
        }
    )


])

任何帮助将不胜感激 - 我似乎无法解决这个问题 - 谢谢!

【问题讨论】:

    标签: python flask plotly-dash


    【解决方案1】:

    您需要将烧瓶应用程序传递给您的 Dash 实例。 像这样。

    app = dash.Dash(__name__, server=server)
    

    所以尝试导入服务器并将其作为参数包含在 app1 和 app2 中的 Dash 实例中。 像这样:

    from app import server
    
    app = dash.Dash(name='dash_1', sharing=True, 
    url_base_pathname='/dash_1', csrf_protect=False, server=server)
    
    app = dash.Dash(name='dash_2', sharing=True, 
    url_base_pathname='/dash_2', csrf_protect=False, server=server)  
    

    希望对你有帮助。

    【讨论】:

    • 感谢您的帮助 - 不幸的是,当我运行代码时,我得到以下信息:
    • AttributeError: 'NoneType' 对象没有属性 'traverse'
    • 可能是因为你声明了两次破折号。删除 app.py 中的声明以及 app1 和 app2 中的导入
    • 我有点困惑 - 你的意思是从 app.py 中删除 ... app = dash.Dash(name, server=server) 并从应用程序导入服务器中删除dash_1 和 dash_2 ?
    • 删除 app.py 中的app= dash.Dash(name, server=server) 是对的。因为您还将我希望您删除的上述应用程序导入到 app1 和 app2。只需从from app import app, server 的导入语句中删除应用程序即可。仅将其更改为 from app import server
    【解决方案2】:

    @Franrey Saycon 完全正确。你导入的东西太多了。如果这对任何人都有帮助,我创建了一个tutorial that shows how to build a multipage Dash application,并解释了文件夹/文件结构和库导入。

    【讨论】:

      猜你喜欢
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 2019-10-05
      • 2021-09-10
      • 1970-01-01
      • 2022-01-05
      • 2020-07-31
      • 2013-10-09
      相关资源
      最近更新 更多