添加分頁支持的視圖函數
app.py
@app.route('/search') def search(): page = request.args.get('page', 1, type=int) #從查詢字符串獲取當前頁數
per_page = current_app.config['GOGOTEST_CASE_PRE_PAGE']#每頁數量
form = SearchForm() keyword = request.args.get('keyword') pagination = TestCase.query.filter_by(creater=keyword).paginate(page, per_page=per_page)#分頁對象當前頁數的記錄列表
search_result = pagination.items#當前頁數的記錄列表 if search_result: return render_template('auto_test_case.html', pagination=pagination, cases=search_result, form=form) else: return 'Not Found'
注意:
在使用render_template將對象傳給模板文件時,除了傳遞查詢結果,不要忘記傳遞pagination對象
知識點:
tip1:
Flask_SQLAlchemy提供了簡單的分頁功能 ,使用paginate()查詢方法可以獲取case記錄
為了實現分頁,把之前的查詢執行函數all()換成了paginate(),它接收的兩個最主要的參數是page和per_page
page:當前請求的頁數
per_page:設置每頁返回的記錄數量,為了方便統一修改,這個值從配置變量GOGOTEST_CASE_PRE_PAGE獲取
也可以直接指定它的值:
per_page=15
tip2:
如果沒有 指定page和per_page參數,Flask-SQLAlchemy會自動從查詢字符串中獲取對應查詢參數(page和per_page)的值,如果沒有獲取到,默認的page=1,默認的per_page=20
tip3:
調用 查詢方法 paginate()會返回一個Pagination類實例,它包含分頁的信息,我們將其稱為分頁對象.
對這個pagination對象調用items屬性會以列表的形式返回對應頁數(默認為第一頁)的記錄.
在訪問這個url時,如果在URL后附加了查詢參數page來指定頁數,例如:http://xxxx/?page=2,這時發起請求調用items變量將會獲得第2頁的15條記錄.
pagination常用方法:
items
- 當前頁的元素集合
total
- 匹配的元素總數
參考: