django+easyui分页处理
相关网址:https://www.cnblogs.com/Mohf/p/4121953.html
思路:
1、datagrid会自己传page 跟rows过来,直接在后台获取
2、得到page跟rows后把它们类型转为int、从数据库取出数据把总行数赋给total,然后把数据放到列表里面
3、判断page是不是第一页:
3.1、如果是第一页:判断有多少行(rows),取rows行数据
3.2、如果不是第一页:从列表删除page-1条数据得到剩余的数据,然后再做第3.1步
4、把total跟得到的数据拼起来:ealist = {'rows':alist,'total':total}
5、把ealist转成json格式数据return回去, ok
实现:
<table id="dg" class="easyui-datagrid" title="作者列表" style="width:100%;height:420px"
data-options="pagination:true,url:'/getAuthor/',method:'get',toolbar:'#tb',">
</table>
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:
allList.append({
"id": li.id,
"name": li.name,
"email": li.email,
"sex": li.sex,
"depart": li.department_id,
"pthone": li.pthone,
"publish_date": json.loads(json.dumps(li.publish_date, cls=DateEncoder)),
})
total = len(allList)
rowPageList = [] # 存储分页数据:一个页面的数据
# 分页处理
if (page == 0): # 第1页
page = 1
if (rows > len(allList)): # 第1页 数据未达到1页行数
json_data_list = {'rows': allList, 'total': total}
else: # 第1页 数据超到1页行数
for s in range(page * rows):
rowPageList.append(allList[s])
json_data_list = {'rows': rowPageList, 'total': total}
else: # 非第1页
ss = allList[page * rows:]
if (len(ss) < rows): # 非第1页 剩余数据未达到1页行数
json_data_list = {'rows': ss, 'total': total}
else: # 非第1页 剩余数据超过1页行数
for i in range(page * rows):
rowPageList.append(ss[i])
json_data_list = {'rows': rowPageList, 'total': total}
return HttpResponse(json.dumps(json_data_list), content_type='application/json; charset=utf-8')
效果:
分页优化:分页公共类
调用分页公共类的页面
from proApp.commonimport DateEncoder,Page
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:
allList.append({
"id": li.id,
"name": li.name,
"email": li.email,
"sex": li.sex,
"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)
return HttpResponse(json.dumps(json_data_list), content_type='application/json; charset=utf-8')
公共类: 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 = {'rows': allList, 'total': total}
else:
for s in range(page * rows):
rowPageList.append(allList[s])
json_data_list = {'rows': rowPageList, 'total': total}
else:
ss = allList[page * rows:]
if (len(ss) < rows):
json_data_list = {'rows': ss, 'total': total}
else:
for i in range(page * rows):
rowPageList.append(ss[i])
json_data_list = {'rows': rowPageList, 'total': total}
return json_data_list
except Exception as e:
print(e)