flask網頁建設主題四
pagination分頁內容
正常不會全部加載 會很卡,通常是一部分載入 分次載入
paginate
(page=None, per_page=None, error_out=True, max_per_page=None)
直接使用於SQL Alchemy物件的返回tweets
page = tweets.paginate(page=1, per_page=3, error_out=False)/page=1在第一頁, per_page=3每頁三個, error_out=False不要顯示404
page是一個物件,具有以下屬性has_next :是否还有下一页
has_prev :是否还有上一页
items : 返回当前页的所有内容
next(error_out=False) : 返回下一页的Pagination对象
prev(error_out=False) : 返回上一页的Pagination对象
page : 当前页的页码(从1开始)
pages : 总页数
per_page : 每页显示的数量
prev_num : 上一页页码数
next_num :下一页页码数
query :返回 创建这个Pagination对象的查询对象
total :查询返回的记录总数
iter_pages(left_edge=2, left_current=2, right_current=5, right_edge=2)
items取回分頁的內容,傳到index.html
page = tweets.paginate(page=1, per_page=3, error_out=False).items
return render_template(‘index.html’, tweets=page, form=form)
route.py/def index 修改page=2,顯示出第二頁的內容
自動分頁顯示內容
將以上過程改為自動,相方有兩個按鈕 前一頁 / 下一頁
後台要知道現在要看第幾頁的功能,可以透過url加一個參數加一個page
127.0.0.1:5000/index?page=1
page = tweets.paginate(page=page_num, per_page=3, error_out=False).items
成果
改寫
將paginate直接在current_user.own_and_followed_tweets()之後使用
tweets=tweets.items傳出到index.html
透過tweets.next_num/tweets.prev_num取得前後頁號
next_url = url_for('index', page=tweets.next_num)
prev_url = url_for('index', page=tweets.prev_num)
next_url=next_url, prev_url=prev_url傳出到index.html
index.html新增按鈕
成果
按Next Page到內容結束會回到page1與直覺不符合,直覺是最後一下沒有Next Page Button,第一頁沒有Prev Page Button
可以透過pagination方法 has_next / has_prev
router.py
改進 if改成一行
next_url = url_for(‘index’, page=tweets.next_num) if tweets.has_next else None
prev_url = url_for(‘index’, page=tweets.prev_num) if tweets.has_prev else None
index.html
成果
paginate / per_page=3 是寫死的 應該是個變量 一個配置,把他的設定放到config.py
tweets = current_user.own_and_followed_tweets().paginate(page=page_num, per_page=3, error_out=False)
config.py
使用
from flask import current_app / 不能新一個app
per_page=current_app.config[‘TWEET_PER_PAGE’]
進行user.html分頁設置
route.py/ def user
user.html/ 新增Prev Page Button Next Page Button
效果