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')

 

效果:

django+easyui分页处理

django+easyui分页处理

 

分页优化:分页公共类

调用分页公共类的页面

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)