dash 构建多页面应用一种方案

本方案对dash官网多页面案例使用dash_bootstrap_components案例进行优化与测试,效果如下

项目代码结构如下

│  app.py

├─assets
│ │ assets_file.py
│ │ __init__.py

└─pages
│ page_analytics.py
│ page_home.py
│ __init__.py

assets/assets_file.py 用来指定样式

"""
指定样式
""" SIDEBAR_STYLE = {
"position": "fixed",
"top": 0,
"left": 0,
"bottom": 0,
"width": "16rem",
"padding": "2rem 1rem",
"background-color": "#f8f9fa",
} # the styles for the main content position it to the right of the sidebar and
# add some padding.
CONTENT_STYLE = {
"margin-left": "18rem",
"margin-right": "2rem",
"padding": "2rem 1rem",
}

pages/page_home.py 多页应用中的一页

import dash
from dash import html
from assets.assets_file import CONTENT_STYLE # 注册pages
dash.register_page(__name__, path='/') layout = html.Div(
children=[
html.H1(children='This is our Home page'),
html.Div(children='''This is our Home page content.'''),
],
style=CONTENT_STYLE # 指定样式
)

pages/page_analytics.py 多页应用中的另一页,同时验证callback

import dash
from dash import html, dcc, callback, Input, Output
from dash_daq import BooleanSwitch
from assets.assets_file import CONTENT_STYLE # 注册pages
dash.register_page(__name__) layout = html.Div(
children=[
html.H1(children='This is our Analytics page'),
html.Div([
"Select a city: ",
dcc.RadioItems(['New York City', 'Montreal', 'San Francisco'],
'Montreal',
id='analytics-input')
]),
html.Br(),
html.Div(id='analytics-output'),
html.Br(),
html.Div(BooleanSwitch(id='switch', on=False, label="开关", labelPosition="top",style={"float": "left"}))
],
style=CONTENT_STYLE
) # page_file.py 内写的callback也可以正常使用
@callback(
Output('analytics-output', 'children'),
Input('analytics-input', 'value')
)
def update_city_selected(input_value):
return f'You selected: {input_value}'

app.py

from dash import Dash, html, dcc, Output, Input
import dash
import dash_bootstrap_components as dbc
import dash_auth
from assets.assets_file import SIDEBAR_STYLE, CONTENT_STYLE class App(Dash):
def __init__(self, *arg, **kwarg):
super().__init__(*arg, **kwarg) self.layout = html.Div(
[
dcc.Location(id="url"),
html.Div(
[
html.H2("Sidebar", className="display-4"),
html.Hr(),
html.P("A simple sidebar layout with navigation links", className="lead"),
dbc.Nav([
dbc.NavLink(f"{page['name']} - {page['path']}", href=page["relative_path"],
active="exact") for page in dash.page_registry.values()
],
vertical=True,
pills=True,
),
],
style=SIDEBAR_STYLE,
),
html.Div(id="page-content", style=CONTENT_STYLE),
dash.page_container
],
) # 添加callback
self.callback(Output('switch', 'label'), Input('switch', 'on'))(self.func_test) def func_test(self, on):
"""
测试page_file.py 内的元素能否触发回调 -> 可以触发
:param on:
:return:
"""
if on:
return '这是开关,当前开关开'
else:
return '这是开关,当前开关关' if __name__ == '__main__':
VALID_USERNAME_PASSWORD_PAIRS = {'user': 'pwd'} # 本地账户密码储存
app = App(
name=__name__,
assets_folder='assets', # 对应资源存放目录,可下载后解压到这里
title='app',
update_title='Loading...',
use_pages=True,
pages_folder='pages', # 对应的pages存放的目录
)
auth = dash_auth.BasicAuth(app, VALID_USERNAME_PASSWORD_PAIRS) # 添加用户登录
app.run_server()

dash构建多页应用的更多相关文章

  1. React构建单页应用方法与实例

    React作为目前最流行的前端框架之一,其受欢迎程度不容小觑,从这门框架上我们可以学到许多其他前端框架所缺失的东西,也是其创新性所在的地方,比如虚拟DOM.JSX等.那么接下来我们就来学习一下这门框架 ...

  2. Nodejs in Visual Studio Code 12.构建单页应用Scrat实践

    1.开始 随着前端工程化深入研究,前端工程师现在碉堡了,甚至搞了个自己的前端网站http://div.io/需要邀请码才能注册,不过里面的技术确实牛.距离顶级的前端架构,目前博主应该是far away ...

  3. 通过Web Api 和 Angular.js 构建单页面的web 程序

    通过Web Api 和 Angular.js 构建单页面的web 程序 在传统的web 应用程序中,浏览器端通过向服务器端发送请求,然后服务器端根据这个请求发送HTML到浏览器,这个响应将会影响整个的 ...

  4. vue2.0 构建单页应用最佳实战

    vue2.0 构建单页应用最佳实战   前言 我们将会选择使用一些 vue 周边的库vue-cli, vue-router,vue-resource,vuex 1.使用 vue-cli 创建项目2.使 ...

  5. 使用 Vuex + Vue.js 构建单页应用

    鉴于该篇文章阅读量大,回复的同学也挺多的,特地抽空写了一篇 vue2.0 下的 vuex 使用方法,传送门:使用 Vuex + Vue.js 构建单页应用[新篇] ------------------ ...

  6. 使用 Vuex + Vue.js 构建单页应用【新篇】

    使用 Vuex + Vue.js 构建单页应用[新篇] 在去年的七月六号的时候,发布了一篇 使用 Vuex + Vue.js 构建单页应用 的文章,文章主要是介绍 vuex 的基本使用方法,发现对大部 ...

  7. 构建单页Web应用

    摘自前端农民工的博客 让我们先来看几个网站: coding teambition cloud9 注意这几个网站的相同点,那就是在浏览器中,做了原先“应当”在客户端做的事情.它们的界面切换非常流畅,响应 ...

  8. Nodejs in Visual Studio Code 13.构建单页应用Scrat示例挖一挖

    1.开始 Scrat作者说要搞个很碉堡的示例,果然就搞出来了,如果要学习并使用Scrat,可以从官方示例开始,简直太方便了. 2.Scrat示例 目录 component_modules : 公共组件 ...

  9. 初识Dash -- 构建一个人人都能够轻松上手的界面,操控数据和可视化

    从事数据科学工作,少不了使用Pandas.scikit-learn这些Python生态系统中的利器,还有就是控制工作流的Jupyter Notebooks,没的说,你和同事都爱用.但是,要想将工作成果 ...

  10. Web API 2 入门——使用ASP.NET Web API和Angular.js构建单页应用程序(SPA)(谷歌翻译)

    在这篇文章中 概观 演习 概要 由网络营 下载网络营训练包 在传统的Web应用程序中,客户机(浏览器)通过请求页面启动与服务器的通信.然后,服务器处理请求,并将页面的HTML发送给客户端.在与页面的后 ...

随机推荐

  1. 两种路由模式的区别(hash模式,history模式)

    1. hash 带#号的,history不带#号2.hash模式用的hashChange监听路径的变化3.history用的是HTML5相关的API语法 使用pushState => 添加一条历 ...

  2. Go/Python RPC使用

    Remote Procedure Call 简单RPC调用 server实现 // 注册接口 type HelloService struct{} func (s *HelloService) Hel ...

  3. Go语言实现基于HTTP的内存缓存服务

    所有的缓存数据都存储在服务器的内存中,因此重启服务器会导致数据丢失,基于HTTP通信会将使开发变得简单,但性能不会太好 缓存服务接口 本程序采用REST接口,支持设置(Set).获取(Get)和删除( ...

  4. 在CentOS上安装与卸载Docker Engine

    本文参考Docker官网提供的 安装手册编写 测试使用的操作系统版本为CentOS 7.9 安装Docker Engine 要在 CentOS 上开始使用 Docker 引擎,请确保 满足先决条件,然 ...

  5. Java中的同步

    Java中的同步   线程间的通讯首要的方式就是对字段及其字段所引用的对象的共享访问.这种通信方式是及其高效的,但是也是导致了可能的错误:线程间相互干涉和内存一致性的问题.避免出现这两种错误的方法就是 ...

  6. 2023 年十大 API 管理趋势

    本文探讨了 API 管理在数字化转型中的重要性,以及 API 管理面临的挑战和发展机遇.文章重点介绍了十大 API 管理发展趋势,包括 API 安全性.API 标准化.云端 API 管理解决方案.低代 ...

  7. P8936 月下缭乱 Sol

    考虑对操作的区间 \([l_i,r_i]\) 的下标进行扫描线而不是对操作的值扫.用 \(m\) 个 set 动态维护 \(x_i\) 对应的操作的下标集合,再用一个可删堆来维护当前所有操作 \(x_ ...

  8. 【Ubuntu】4.挂载/连接VM共享文件夹

    第一步 首先需要在虚拟机设置中开启共享文件夹 第二步 修改fstab文件自动挂载 如果您想要自动挂载共享文件夹,可以编辑/etc/fstab文件并添加以下内容:(二选一即可,推荐) sudo gedi ...

  9. 2023-03-07:x264的视频编码器,不用ffmpeg,用libx264.dll也行。请用go语言调用libx264.dll,将yuv文件编码成h264文件。

    2023-03-07:x264的视频编码器,不用ffmpeg,用libx264.dll也行.请用go语言调用libx264.dll,将yuv文件编码成h264文件. 答案2023-03-07: 使用 ...

  10. 2022-07-18:以下go语言代码输出什么?A:Groutine;B:Main;C:Goroutine;D:GoroutineMain。 package main import ( “f

    2022-07-18:以下go语言代码输出什么?A:Groutine:B:Main:C:Goroutine:D:GoroutineMain. package main import ( "f ...