找回密碼
 註冊
搜索
查看: 123|回復: 0

[教學] flask render_template mariadb 如何做翻頁(pagination)功能

[複製鏈接]
發表於 前天 23:48 | 顯示全部樓層 |閱讀模式
Push to Facebook
google查了不少文章

發現mariadb 翻頁(pagination)功能 沒人寫
只好土法煉鋼自己寫一個


展示:

flask render_template mariadb 翻頁功能 pagination

flask render_template mariadb  翻頁功能 pagination



admin_view.py內寫入
  1. from app.pagination import pageft

  2. @app.route("/admin/company",methods=['GET','POST'])
  3. def admin_company():

  4. conn = check_db_connection()
  5. # create a connection cursor
  6. # execute a SQL statement
  7. cursor = conn.cursor(dictionary=True)

  8. count_sql = "select * from net_company"
  9. cursor.execute(count_sql)
  10. total = len(cursor.fetchall())

  11. page_num = request.args.get('page', 1, type=int) #抓取初始頁數
  12. firstcount = 1 # 初始計數
  13. displaypg = 3 # 每頁顯示幾筆

  14. if firstcount < 0 :
  15. firstcount = 1
  16. elif page_num==1:
  17. firstcount = 1
  18. else:
  19. firstcount = firstcount*page_num+1
  20. # pageft(初始計數, 總筆數, 每頁顯示幾筆, url_for(def路徑))
  21. page_nav = pageft(firstcount, total, displaypg, "admin_company")

  22. sql = "SELECT * FROM net_company ORDER BY num ASC limit "+str(firstcount)+","+str(displaypg)

  23. cursor.execute(sql)
  24. result = cursor.fetchall()
  25. sm_companys = []
  26. for rows in result:
  27. sm_companys.append({"id": rows['id'], "num": rows['num'],"subject": rows['subject']})

  28. return render_template("admin/company.html", status="show",companys = sm_companys,page_num=page_num, page_nav=page_nav)
複製代碼

建立 pagination.py

  1. from flask import request,url_for
  2. from math import ceil

  3. def pageft(firstcount,total,displaypg = 20,url=""):
  4.     if request.args.get('page')== None:
  5.         page = 1
  6.     else:
  7.         page = int(request.args.get('page'))
  8.     if page<=0:
  9.         page=1
  10.     lastpg = ceil(total /displaypg) # 最後頁,也是總頁數

  11.     if page == 1: # 上一頁
  12.         prepg=1
  13.     else :
  14.         prepg = page - 1

  15.     if page == lastpg : # 下一頁
  16.         nextpg = page
  17.     else:
  18.         nextpg = page + 1

  19.     if page==1:
  20.         firstcount = 1
  21.         nextcount = 1 * displaypg
  22.     else:
  23.         firstcount = (page-1) * displaypg+1
  24.         nextcount = page * displaypg

  25.     pagenav = "顯示 <B>"+ str(firstcount)  +"</B>-<B>"+ str(min(nextcount ,total)) +"</B> 筆記錄,共 "+str(total)+" 筆"

  26.     if lastpg <= 1:
  27.         return False

  28.     pagenav += " <a href='"+ url_for(url) +"?page=1'>頁首</a> "
  29.     if prepg:
  30.         pagenav += " <a href='"+url_for(url)+"?page="+str(prepg)+"'>上一頁</a> "
  31.     else:
  32.         pagenav += " <a href='"+url_for(url)+"?page="+str(prepg)+"'>上一頁</a> "
  33.     if nextpg :
  34.         pagenav += " <a href='"+url_for(url)+"?page="+ str(nextpg)+"'>下一頁</a>"
  35.     else:
  36.         pagenav += " <a href='"+url_for(url)+"?page="+ str(nextpg)+"'>下一頁</a>"
  37.     pagenav +=" <a href='"+url_for(url)+"?page="+str(lastpg)+"'>頁尾</a> "
  38.     print("pagenav:",pagenav)

  39.     pagenav += " 到第 <select onchange = "window.location.href=this.value" >\n"
  40.     for i in range(lastpg):
  41.         if i+1 == page:
  42.             pagenav +="<option value='"+url_for(url)+"?page="+str(i+1)+"' selected>"+str(i+1)+"</option>\n"
  43.         else:
  44.             pagenav +="<option value='"+url_for(url)+"?page="+str(i+1)+"'>"+str(i+1)+"</option>\n"

  45.     pagenav += "</select> 頁,共 "+str(lastpg)+" 頁";
  46.     return pagenav
複製代碼


company.html 加入
  1. {% if page_nav %}
  2.     <div style="ruby-align: center">{{page_nav | safe}}</div>
  3.     {% endif %}
複製代碼


完成

文章出處: NetYea 網頁設計, 慧晟數位科技, 網站架設

參考文章
https://stackoverflow.com/questi ... rts-to-first-option

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

Archiver|手機版|小黑屋|TShopping

GMT+8, 2025-7-12 16:19 , Processed in 0.026584 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回復 返回頂部 返回列表