🚀 Dash 分頁功能完整教學:用 dcc.Slider 建立可切換頁面的網頁介面

更新 發佈閱讀 9 分鐘

在資料視覺化專案中,如果你需要在網頁上呈現大量項目,例如圖片、紀錄、分析結果,一次性載入所有內容可能會讓使用者介面卡頓或混亂。

本篇教學會引導你如何使用 Python 的 Dash 框架,製作一個具有「分頁功能」的網頁應用,讓使用者可以滑動頁面選擇器 (Slider) 分頁檢視資料。


🧩 功能說明

我們將打造一個 Dash 應用程式,展示 500 筆模擬的產品資料,內容包含:

  • 產品名稱
  • 產品描述
  • 隨機產生的價格資訊

當資料量超過一定門檻時(例如 100 筆),啟用分頁功能,每頁最多顯示 20 筆。

raw-image
raw-image

📦 所需套件

請先安裝 Dash:

pip install dash

🧪 範例程式碼

import dash
from dash import html, dcc, Input, Output
import random
import math

# 建立 Dash 應用
app = dash.Dash(__name__)
app.title = "分頁展示範例"

# 模擬資料:建立 500 筆產品資料
products = [
{
"name": f"產品 {i+1}",
"description": f"這是第 {i+1} 個產品的描述。",
"price": f"${random.randint(100, 1000)}"
}
for i in range(500)
]

# 分頁設定
PAGE_SIZE = 20
THRESHOLD = 100 # 超過這個數量才分頁
total_pages = math.ceil(len(products) / PAGE_SIZE)

# 主要頁面佈局(初始頁面)
if len(products) <= THRESHOLD:
# 不分頁:一次顯示全部資料
app.layout = html.Div([
html.H1("產品清單", style={"textAlign": "center"}),
html.Div([
html.Div([
html.H3(p["name"]),
html.P(p["description"]),
html.P(f"價格:{p['price']}")
], style={"border": "1px solid #ccc", "padding": "10px", "margin": "10px"})
for p in products
])
])
else:
# 分頁模式:使用 Slider 控制頁數
app.layout = html.Div([
html.H1("產品清單(分頁)", style={"textAlign": "center"}),
dcc.Slider(
id='page-slider',
min=1,
max=total_pages,
value=1,
step=1,
marks={i: str(i) for i in range(1, total_pages+1)},
tooltip={"placement": "bottom", "always_visible": True}
),
html.Div(id='product-list', style={"marginTop": "30px"})
])

# 動態更新每頁顯示的內容
@app.callback(
Output('product-list', 'children'),
Input('page-slider', 'value')
)
def update_page(page_num):
start_idx = (page_num - 1) * PAGE_SIZE
end_idx = start_idx + PAGE_SIZE
current_page_data = products[start_idx:end_idx]

return [
html.Div([
html.H3(p["name"]),
html.P(p["description"]),
html.P(f"價格:{p['price']}")
], style={"border": "1px solid #ccc", "padding": "10px", "margin": "10px"})
for p in current_page_data
]

# 啟動伺服器
if __name__ == "__main__":
app.run_server(debug=True)

📖 說明逐步解析

1️⃣ 模擬資料結構

這段程式碼產生了 500 筆資料,每筆為一個字典,包含 name, description, price

products = [
{
"name": f"產品 {i+1}",
"description": f"這是第 {i+1} 個產品的描述。",
"price": f"${random.randint(100, 1000)}"
}
for i in range(500)
]

2️⃣ 分頁邏輯與 Slider 設定

若資料數量超過 THRESHOLD,則進入分頁模式,透過 dcc.Slider 作為分頁元件:

dcc.Slider(
id='page-slider',
min=1,
max=total_pages,
value=1,
step=1,
marks={i: str(i) for i in range(1, total_pages+1)},
tooltip={"placement": "bottom", "always_visible": True}
)
  • marks: 顯示頁碼
  • tooltip: 顯示當前頁碼提示
  • step=1: 每次跳一頁

3️⃣ 動態更新頁面內容(callback)

Dash 使用 callback 動態渲染內容:

@app.callback(
Output('product-list', 'children'),
Input('page-slider', 'value')
)
def update_page(page_num):
...

這段程式會根據目前的 page_num 取出對應的資料並重新渲染 html.Div 清單。


4️⃣ 靜態模式(少量資料)

若資料總數不多,就不需要滑桿,直接顯示所有資料。

if len(products) <= THRESHOLD:
app.layout = html.Div([...])

這種條件式佈局可根據資料狀況自動調整使用者介面,提升 UX。


✅ 小結

這篇教學示範了如何:

  • 在 Dash 中建立分頁邏輯
  • 使用 dcc.Slider 做為頁面控制器
  • 自動切換分頁或一次性顯示所有資料
  • 搭配 callback 實現動態更新介面

這種設計廣泛應用於圖片展示、表格報表、歷史紀錄或機器分析結果的網頁前端建構上。

留言
avatar-img
留言分享你的想法!
avatar-img
螃蟹_crab的沙龍
153會員
300內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。 興趣是攝影,踏青,探索未知領域。 人生就是不斷的挑戰及自我認清,希望老了躺在床上不會後悔自己什麼都沒做。
螃蟹_crab的沙龍的其他內容
2025/07/17
Dash 是由 Plotly 所開發的 Python Web 應用框架,用來快速建構互動式資料視覺化應用。dcc.Graph 是 Dash 中的核心元件之一,用來顯示圖表(基於 Plotly 的視覺化功能),支援互動操作如滑鼠移動、點擊、縮放等。 📌 什麼是 dcc.Graph? dcc.G
Thumbnail
2025/07/17
Dash 是由 Plotly 所開發的 Python Web 應用框架,用來快速建構互動式資料視覺化應用。dcc.Graph 是 Dash 中的核心元件之一,用來顯示圖表(基於 Plotly 的視覺化功能),支援互動操作如滑鼠移動、點擊、縮放等。 📌 什麼是 dcc.Graph? dcc.G
Thumbnail
2025/05/10
📌 你將學會: Input, Output, State 差異與用途 多個輸入的 callback 使用方法 使用者動作判斷(例如:只在按下按鈕時觸發) 利用 dash.callback_context 控制觸發條件 實作:多條國家生命線圖 + 自訂年份區間 + 按鈕觸發圖表更新 ✳
Thumbnail
2025/05/10
📌 你將學會: Input, Output, State 差異與用途 多個輸入的 callback 使用方法 使用者動作判斷(例如:只在按下按鈕時觸發) 利用 dash.callback_context 控制觸發條件 實作:多條國家生命線圖 + 自訂年份區間 + 按鈕觸發圖表更新 ✳
Thumbnail
2025/05/01
Dash 全面入門教學:從 0 到打造互動式資料分析應用 Dash 是由 Plotly 所開發的 Python Web 應用框架,專為資料分析與視覺化設計。你可以用 Dash 快速打造具有豐富互動功能的網頁應用,而不需要學習前端技術如 JavaScript、HTML 或 CSS。 📦 安裝 D
Thumbnail
2025/05/01
Dash 全面入門教學:從 0 到打造互動式資料分析應用 Dash 是由 Plotly 所開發的 Python Web 應用框架,專為資料分析與視覺化設計。你可以用 Dash 快速打造具有豐富互動功能的網頁應用,而不需要學習前端技術如 JavaScript、HTML 或 CSS。 📦 安裝 D
Thumbnail
看更多
你可能也想看
Thumbnail
在小小的租屋房間裡,透過蝦皮購物平臺採購各種黏土、模型、美甲材料等創作素材,打造專屬黏土小宇宙的療癒過程。文中分享多個蝦皮挖寶地圖,並推薦蝦皮分潤計畫。
Thumbnail
在小小的租屋房間裡,透過蝦皮購物平臺採購各種黏土、模型、美甲材料等創作素材,打造專屬黏土小宇宙的療癒過程。文中分享多個蝦皮挖寶地圖,並推薦蝦皮分潤計畫。
Thumbnail
小蝸和小豬因購物習慣不同常起衝突,直到發現蝦皮分潤計畫,讓小豬的購物愛好產生價值,也讓小蝸開始欣賞另一半的興趣。想增加收入或改善伴侶間的購物觀念差異?讓蝦皮分潤計畫成為你們的神隊友吧!
Thumbnail
小蝸和小豬因購物習慣不同常起衝突,直到發現蝦皮分潤計畫,讓小豬的購物愛好產生價值,也讓小蝸開始欣賞另一半的興趣。想增加收入或改善伴侶間的購物觀念差異?讓蝦皮分潤計畫成為你們的神隊友吧!
Thumbnail
不論是 Astra、Blocksy 還是 Kadence 佈景主題,都有內建頁首與頁尾編輯器,你可以在外觀自訂器中以所見即所得的方式新增各種元素,像是選單、按鈕及社群圖示。
Thumbnail
不論是 Astra、Blocksy 還是 Kadence 佈景主題,都有內建頁首與頁尾編輯器,你可以在外觀自訂器中以所見即所得的方式新增各種元素,像是選單、按鈕及社群圖示。
Thumbnail
視覺層級並不侷限於平面設計,在用戶體驗及介面上更是一個重要的核心之一。視覺層級除了讓畫面的視覺編排更加精緻好看,更重要的功能是能讓畫面有效地被組織,讓觀者更容易理解。
Thumbnail
視覺層級並不侷限於平面設計,在用戶體驗及介面上更是一個重要的核心之一。視覺層級除了讓畫面的視覺編排更加精緻好看,更重要的功能是能讓畫面有效地被組織,讓觀者更容易理解。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
這篇文章教你如何製作側邊欄,包括準備工作、HTML和CSS的部分,還有一些互動效果。文章涵蓋了連結、圖片、超連結、大小、顏色、排版、flex和滑鼠互動等內容。
Thumbnail
這篇文章教你如何製作側邊欄,包括準備工作、HTML和CSS的部分,還有一些互動效果。文章涵蓋了連結、圖片、超連結、大小、顏色、排版、flex和滑鼠互動等內容。
Thumbnail
Anytype主要分為四區塊:目錄欄(Widget組成)、主編輯畫面、導航選單、設定區。
Thumbnail
Anytype主要分為四區塊:目錄欄(Widget組成)、主編輯畫面、導航選單、設定區。
Thumbnail
JavaScript 套件,頁碼 Pagination.js 搭配 axios API 請求範例
Thumbnail
JavaScript 套件,頁碼 Pagination.js 搭配 axios API 請求範例
Thumbnail
【Paged Notes】是一款簡單、清晰、直觀的記事軟體,提供自訂記事分類、清單記事和備忘記事等功能。同時支援標示記事重要性和自訂記事底色,並可自動連結網址、電話和E-mail。未來將持續新增相關模組與功能。
Thumbnail
【Paged Notes】是一款簡單、清晰、直觀的記事軟體,提供自訂記事分類、清單記事和備忘記事等功能。同時支援標示記事重要性和自訂記事底色,並可自動連結網址、電話和E-mail。未來將持續新增相關模組與功能。
Thumbnail
在Dcard有人求救一個問題:想要將layer與panel的資料提出出來,如下圖。 這個題目是很經典的需求,就是多條件查找,多條件查找有蠻多種不同的解決方法,甚至版本不同解法也是天壤之別哦。 準備動作 在寫函數之前,記得要先觀察一下我們想要提取的資料有什麼樣的規則,可以發現A欄中只
Thumbnail
在Dcard有人求救一個問題:想要將layer與panel的資料提出出來,如下圖。 這個題目是很經典的需求,就是多條件查找,多條件查找有蠻多種不同的解決方法,甚至版本不同解法也是天壤之別哦。 準備動作 在寫函數之前,記得要先觀察一下我們想要提取的資料有什麼樣的規則,可以發現A欄中只
Thumbnail
本篇介紹:設定about與categories、tags相關獨立頁面,讓自己的文章利於統整與搜尋。
Thumbnail
本篇介紹:設定about與categories、tags相關獨立頁面,讓自己的文章利於統整與搜尋。
Thumbnail
隨著生活和工作複雜度的提高,我們面臨著在多個平台和網站上收集資訊的挑戰。因此,掌握整理資訊的技巧,以更有序的方式進行管理和追蹤,是值得思考的議題。本篇文章,我們將分享 Save to Notion,讓你輕鬆將網頁內容分門別類地儲存進 Notion 頁面,有助於你建立一個高效且有組織性的資訊管理系統。
Thumbnail
隨著生活和工作複雜度的提高,我們面臨著在多個平台和網站上收集資訊的挑戰。因此,掌握整理資訊的技巧,以更有序的方式進行管理和追蹤,是值得思考的議題。本篇文章,我們將分享 Save to Notion,讓你輕鬆將網頁內容分門別類地儲存進 Notion 頁面,有助於你建立一個高效且有組織性的資訊管理系統。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News