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. 【树莓派】Docker安装calibre-web搭建在线书城

    一.下载docker镜像 sudo docker pull johngong/calibre-web 二.创建calibre-web镜像的映射目录,存放配置文件&书籍 mkdir /home/ ...

  2. Go语言网络编程: 模拟实现DNS服务器

    环境: 两台虚拟机,不限系统 写在前面 DNS服务器是干什么的?DNS服务器(Domain Name Server,域名服务器)是进行域名和与之相对应的IP地址进行转换的服务器,保存了一张域名和与之相 ...

  3. 容器云平台监控告警体系(五)—— Prometheus发送告警机制

    1.概述 在Prometheus的架构中告警被划分为两个部分,在Prometheus Server中定义告警规则以及产生告警,Alertmanager组件则用于处理这些由Prometheus产生的告警 ...

  4. Spring配置数据库连接

    <beans xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="ht ...

  5. 大规模 Transformer 模型 8 比特矩阵乘简介 - 基于 Hugging Face Transformers、Accelerate 以及 bitsandbytes

    引言 语言模型一直在变大.截至撰写本文时,PaLM 有 5400 亿参数,OPT.GPT-3 和 BLOOM 有大约 1760 亿参数,而且我们仍在继续朝着更大的模型发展.下图总结了最近的一些语言模型 ...

  6. vue中使用西瓜视频api

    https://v2.h5player.bytedance.com/en/api/ 1 npm install xgplayer 1 <div id="mse">< ...

  7. [C++核心编程] 1、内存分区模型

    文章目录 1 内存分区模型 1.1 程序运行前 1.2 程序运行后 1.3 new操作符 1 内存分区模型 C++程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制代码,由操作系统进 ...

  8. Django笔记三十四之分页操作

    本文首发于公众号:Hunter后端 原文链接:Django笔记三十四之分页操作 这一篇笔记介绍一下如何在 Django 使用分页. Django 自带一个分页的模块: from django.core ...

  9. 一天吃透Redis面试八股文

    Redis连环40问,绝对够全! Redis是什么? Redis(Remote Dictionary Server)是一个使用 C 语言编写的,高性能非关系型的键值对数据库.与传统数据库不同的是,Re ...

  10. MySQL高频面试题

    什么是MySQL MySQL是一个关系型数据库,它采用表的形式来存储数据.你可以理解成是Excel表格,既然是表的形式存储数据,就有表结构(行和列).行代表每一行数据,列代表该行中的每个值.列上的值是 ...