Flask快速實現分頁效果

2021-08-25 19:27:44 字數 2652 閱讀 9969

先上整體效果圖:

然後是分頁圖詳情:

路由:views.py

@login_required

def blog_list(page=none):

...模板:blog_list.html和pages.html

blog_list.html作為部落格頁面,pages.html模板為分頁頁面,呈現時會在blog_list.html中匯入pages.html的內容。

}

首先從路由開始:

路由的設計思路是根據查詢的頁碼作為引數,利用flasksqlalchemy的model進行查詢並對查詢結果進行分頁處理。

@login_required

def blog_list(page=none):

#每個人只能看自己發表的blog

if not page:

page = 1

from models import blog

from models import user

user_id = user.query.filter_by(username=session['user']).first().id

#paginate方法返回乙個sqlalchemy.pagination型別物件

blogs = blog.query.filter_by(user_id=user_id).order_by(blog.addtime.desc()).paginate(page=page,per_page=3)

category=[(1, '情感'), (2, '星座'), (3, '愛情')]

return render_template('blog_list.html', title='部落格列表',session=session,blogs=blogs.items,category=category,pagination=blogs)

分析一下上述**:

2. @login_required是自定義裝飾器,用來限定只有登入使用者才可以瀏覽部落格列表,未登入使用者會進入登入頁面

3. 作為model的blog中有乙個外來鍵屬性user_id引用著使用者表,用來記錄部落格的作者資訊

4. blogs是乙個flasksqlalchemy中的pagination型別物件。乙個query物件呼叫paginate方法就獲得了pagination物件。paginate方法傳入了兩個引數,乙個是當前頁,另乙個是每一頁最多顯示多少部落格。paginate的返回值為代表當前頁的pagination物件。乙個paginationi物件的常用屬性有:

常用方法有:

iter_pages(left_edge=2,left_current=2,right_current=5,right_edge=2)

iter_pages 用來獲得針對當前頁的應顯示的分頁頁碼列表。

假設當前共有100頁,當前頁為50頁,按照預設的引數設定呼叫iter_pages獲得的列表為:

[1,2,none,48,49,50,51,52,53,54,55,none,99,100]

看一下pages.html模板的內容:

分析一下上述頁面**:、

1. 使用jinja2的巨集,定義my_paginate方法,傳入路徑和pagination物件作為引數。通過呼叫巨集的執行生成分頁內容。

2. 通過設定class為pagination,可以使用flaskbootstrap預置css樣式

3. 利用jinja2的if語句根據當前頁是否還有前一頁使用不同的元素和class。

5. 利用iter_page(1,1,3,1)會獲得基於當前頁應該顯示的頁碼列表。如上面截圖所示,如果當前頁是第4頁,獲得的分頁列表內容         就是[1,none,3,4,5,6,none,9],如果當前頁是第9頁,獲得的分頁列表內容是[1,none,8,9]

6. 利用jinja2的for語句遍歷列表,如果是頁碼,就根據頁碼生成a標籤中的文字並設定跳轉路徑並新增上page引數。如果是none,a標籤中的文字為實體名表示的省略號,路徑為「#」。額外的,如果遍歷時獲得了當前頁碼所對應的數字時,為li標籤的class屬性新增上額外的active以獲得額外的樣式。

最後在blog_list.html中要引入pages.html

}

在blog_list.html中匯入pages.html模板並呼叫pages.html中定義的my_pagination巨集,傳入兩個引數,第乙個引數是pagination物件,這個引數是從views.py中渲染blog_list.html的時候傳入的,另外乙個就是乙個字串'blog_list',它對應的是views.py中路由方法的名稱,有了這個名稱在my_paginate中就可以利用url_for函式進行路由方法對應路徑的尋找。

flask 實現分頁

對學生表裡學生的資料分頁 對應的處理的方法 stu.route stupage defstu page 獲取get請求傳過來的頁數,沒有傳引數,預設為1 page int request.args.get page 1 獲取get請求傳過來的以多少條資料分頁的引數,預設為5 per page int...

Flask 實現資料分頁

目錄 一 flask sqlalchemy 直接獲取分頁後的資料 1 0 基於 flsk sqlalchemy 的批量資料插入 add all list 1 1 pagination物件的常用屬性 1 2 pagination物件的常用方法 二 flask paginate 對原始資料進行分頁 三 ...

AJAX實現分頁效果

本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...