bootstrap-table with server-side pagination not working correctly

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-09 01:15:31

I solved this on django:

my js:

$(document).ready(function(){
    ...
    ajaxGet();
});

function ajaxGet(){
    var table_params = $('#docs_table').bootstrapTable({
        url: 'ajax/test_1/data?',
        queryParams: function (p) {
            return {
                limit: p.limit,
                offset: p.offset,
                sort: p.sort,
                order: p.order,
                'data[]': [selected_data],//for multi-select filter

            };
        }
    });
    $('#docs_table').bootstrapTable('refresh');
}

py:

def test_1(request):

        q = m.Doc.objects.all()

        data = request.GET.get('data[]')


        if data:
            data = data.split(',')
            q = q.filter(id__in=pis)

        paginator = Paginator(q, 10)

        sort = request.GET.get('sort', 'id')
        order = request.GET.get('order', 'asc')
        limit = int(request.GET.get('limit'))
        offset = int(request.GET.get('offset'))

        if order == 'asc':
            q = q.order_by(sort)
        else:
            q = q.order_by('-' + sort)

        paginator = Paginator(q, limit)
        page = int(offset / limit) + 1

        try:
            docs = paginator.page(page)
        except PageNotAnInteger:
            docs = paginator.page(1)
        except EmptyPage:
            docs = paginator.page(paginator.num_pages)

        docs_dict = {
            'total': paginator.count,
            'rows': [{'id': doc.id,
                      'name': doc.name,
                      } for doc in docs]
        }

        return JsonResponse(docs_dict)

server-side pagination means you need to implement pagination on server side.

Your server code is missing something to handle page number, rows per-page, order etc. Server should only return the rows for that page.

Check out the official example, and observe ajax return value when you change page. http://wenzhixin.net.cn/p/bootstrap-table/docs/examples.html#server-side-pagination-table

This is the request & return for page #4, 10 rows.

Request URL:
http://wenzhixin.net.cn/examples/bootstrap_table/data?limit=10&offset=30&order=asc

Return value:

{
  "total": 800,
  "rows": [
    {
      "id": 30,
      "name": "Item 30",
      "price": "$30"
    },
    {
      "id": 31,
      "name": "Item 31",
      "price": "$31"
    },
    {
      "id": 32,
      "name": "Item 32",
      "price": "$32"
    },
    {
      "id": 33,
      "name": "Item 33",
      "price": "$33"
    },
    {
      "id": 34,
      "name": "Item 34",
      "price": "$34"
    },
    {
      "id": 35,
      "name": "Item 35",
      "price": "$35"
    },
    {
      "id": 36,
      "name": "Item 36",
      "price": "$36"
    },
    {
      "id": 37,
      "name": "Item 37",
      "price": "$37"
    },
    {
      "id": 38,
      "name": "Item 38",
      "price": "$38"
    },
    {
      "id": 39,
      "name": "Item 39",
      "price": "$39"
    }
  ]
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!