相關**:
思路:
1、datagrid會自己傳page 跟rows過來,直接在後台獲取
2、得到page跟rows後把它們型別轉為int、從資料庫取出資料把總行數賦給total,然後把資料放到列表裡面
3、判斷page是不是第一頁:
3.1、如果是第一頁:判斷有多少行(rows),取rows行資料
3.2、如果不是第一頁:從列表刪除page-1條資料得到剩餘的資料,然後再做第3.1步
4、把total跟得到的資料拼起來:ealist =
5、把ealist轉成json格式資料return回去, ok
實現:
def getauthor(request):
if request.method == "get":
page = int(request.get.get('page',0))-1
rows = int(request.get.get('rows',0))
list = models.author.objects.all().order_by("-id")
alllist =
for li in list:
"id": li.id,
"head_img": str(li.head_img),
"name": li.name,
"email": li.email,
"***": li.***,
"depart": li.depart_id,
"phone": li.phone,
"account": li.account,
"publish_date": json.loads(json.dumps(li.publish_date, cls=dateencoder)),
})total = len(alllist)
if page < 0 or rows == 0:
json_data_list = alllist
else:
p = datagrid()
json_data_list = p.page(page, rows, total, alllist)
if request.method == "post":
page = int(request.post.get('page', '')) - 1
rows = int(request.post.get('rows', ''))
name = request.post.get("name", '')
*** = request.post.get("***")
depart = request.post.get("depart")
datefrom = request.post.get("datefrom")
dateto = request.post.get("dateto")
# 定乙個字典用於儲存前端傳送過來的查詢條件
search_dict = dict()
if datefrom:
search_sql = models.author.objects.filter(publish_date__gte=datefrom)
else:
search_sql = models.author.objects
if name:
search_sql = search_sql.filter(name=name)
if dateto:
search_sql = search_sql.filter(publish_date__lte=dateto)
if int(***)>-1:
search_sql = search_sql.filter(***__contains=***)
if (depart and int(depart)>-1):
search_sql = search_sql.filter(depart=depart)
# 序列化
list = search_sql.order_by("-id")
alllist =
for li in list:
"id": li.id,
"head_img": str(li.head_img),
"name": li.name,
"email": li.email,
"***": li.***,
"depart": li.depart_id,
"phone": li.phone,
"account": li.account,
"publish_date": json.loads(json.dumps(li.publish_date, cls=dateencoder)),
})total = len(alllist)
p = datagrid()
json_data_list = p.page(page, rows, total, alllist)
效果:
分頁優化:分頁公共類
呼叫分頁公共類的頁面
def getauthor(request):
if request.method == "get":
page = int(request.get.get('page',''))-1
rows = int(request.get.get('rows',''))
list = models.author.objects.all().order_by("-id")
alllist =
for li in list:
"id": li.id,
"name": li.name,
"email": li.email,
"***": li.***,
"depart": li.department_id,
"pthone": li.pthone,
"publish_date": json.loads(json.dumps(li.publish_date, cls=dateencoder)),
})total = len(alllist)
p = page()
json_data_list = p.page(page, rows, total, alllist)
公共類: common.py
# 分頁處理class page():
def __init__(self):
self.rowpagelist =
self.json_data_list = {}
def page(self, page, rows, total, alllist):
# page: 當前頁碼 rows:**1頁面**行數 total:所有資料len, alllist:所有資料
rowpagelist =
json_data_list = {}
try:
if (page == 0):
page = 1
if (rows > len(alllist)):
json_data_list =
else:
for s in range(page * rows):
json_data_list =
else:
ss = alllist[page * rows:]
if (len(ss) < rows):
json_data_list =
else:
for i in range(page * rows):
json_data_list =
return json_data_list
except exception as e:
print(e)
Mysql儲存過程(三) 處理分頁
分頁功能在任何應用中都比較常見,而 mysql 的儲存過程分頁必須通過動態 sql 來執行。分頁對應的 offset 和 row count 必須先用 concat 函式變成字串組裝到 sql 中 如語句 1 而不能直接使用 如語句 2 mysql 不支援 mysql 分頁功能的實現如下 所示 sq...
Mysql儲存過程(三) 處理分頁
分頁功能在任何應用中都比較常見,而 mysql 的儲存過程分頁必須通過動態 sql 來執行。分頁對應的 offset 和 row count 必須先用 concat 函式變成字串組裝到 sql 中 如語句 1 而不能直接使用 如語句 2 mysql 不支援 mysql 分頁功能的實現如下 所示 cr...
Mybatis 一對多分頁資料條數不正確處理方式
今天在進行一對多的left join處理的時候發現分頁的資料量不正確,後來把列印的sql去資料庫執行,查詢出來的確實是10條 1在xml裡進行更改collection的對映 usermap type com.abc.entity.sysuser uid column uid uname column...