本文的Flask留言板分頁程式透過網址路徑參數(也就是REST風格)取得分頁的頁碼。若首頁路徑沒有附加任何參數,則預設為1,代表第1頁;點擊分頁導覽列的頁碼,或者直接在網址後面輸入頁碼數字,都能瀏覽到指定的分頁。
Python Flask程式中,原本處理首頁請求的路由會取出全部留言:
@app.route('/') def index(): gb = Guestbook.query.all() return render_template("index.html", books=gb)
改成依照頁碼參數(num),取得該分頁的5筆(上限)留言:
然而,上面的路由在執行時,若沒有收到頁碼參數,將會出現「找不到網頁(404 Not Found)」的錯誤:
所以路由前面要加上一行指定路徑參數預設值(defaults)的敘述:
在網頁樣板的底部加入分頁導覽列
留言板網頁的樣板是templates路徑裡的index.html檔,請把擷取「目前留言人數」資料的敘述:
目前留言人數:{{ books|length }}
改成:
目前留言人數:{{ books.total }}
然後在顯示留言內容的div區域底下,新增建立導覽列的HTML碼。<nav>標籤代表“navigation”(導覽列),是建立導覽列的HTML5標籤指令。關於使用url_for()動態建立網址的說明,請參閱《超圖解Python程式設計入門》9-14頁。
設定分頁導覽列的CSS樣式
未使用CSS裝飾之前,分頁導覽列呈現普通的超連結文字外觀。我們將替它改成如下的外觀,每個分頁連結加上矩形背景,底下的色碼代表矩形的背景色。導覽列的寬度設成父元素的150%的原因是,原本的留言板版面規劃的寬度比較窄,若導覽列分頁頁碼過多,它將顯示成兩行。
把導覽列寬度設成1.5倍(或更多,視版面規劃而定),導覽列的元素就能往右邊延伸,不會折行。
頁碼的矩形尺寸以及文字編排方式的CSS樣式設定如下:
新增的CSS樣式設定如下,首頁的CSS樣式檔位於static路徑裡的“css\ main.css”:
.pagination { /* 分頁 */ width: 150%; margin-top: 25px; padding-bottom: 20px; } .pagination .box { /* 頁碼的矩形背景 */ text-align: center; text-decoration: none; margin-right: 5px; padding: 10px 13px; box-sizing: border-box; border-radius: 3px; } .pagination a { /* 分頁的超連結標籤 */ background: #222; color: #fff; } .pagination .current { /* 當前分頁 */ background: #fff; color: #222; font-weight: bold; } .pagination .dots { /* 點點點 */ background: #d1a68c; color: #222; font-weight: bold; } .pagination .arrow { /* 左右箭號 */ background: #d25400; color: #fff; font-weight: bold; }
包含「上一頁」和「下一頁」連結的導覽列
套用CSS樣式並且加上「上一頁」與「下一頁」連結的導覽列HTML碼如下,本文新增的程式檔可按此連結下載。