Django异步请求分页的实现

Django的开发文档有一个自带的Paginator分页器,可以很方便的在原生的模板中进行调用函数分页;

但是异步请求不能给模板传入对象,该怎么分页了?

1、就将分页需要用到的数据从对象中提前取出来,放在字典里面

2、前台调用时候不再从对象中取,而是字典中取,完成分页样式; 

#views.py
获取返回列表res
从请求中获取分页面数目per_page
从请求中获取当前页面current_page

#对原始结果集进行分页的处理函数
def paginator(res, per_page, current_page):
    p = Paginator(res, per_page)
    contacts = p.page(current_page)
    return {
        "current_num": contacts.number,
        "total_nums": contacts.paginator.num_pages,
        'has_next': contacts.has_next(),
        'has_prev': contacts.has_previous(),
        'next_page': contacts.next_page_number() if contacts.has_next() else 0,
        'prev_page': contacts.previous_page_number() if contacts.has_previous() else 0,
        'objects': contacts.object_list,
    }

//异步请求的地方,将收到的json数据,显示成分页样式
function  get_pools(current_page) {
    $.ajax({
        url: "/pool/info/pools",
        type: "GET",
        data: {"server_ip": get_cur_server(),"per_page":2,"current_page":current_page},
        datatype: 'json',
        success: function (contacts) {
            var arg=paginator(contacts);
        }
    });
}

//.step-links是html已经存在的div;对里面加上前一页,当前页,总页数,后一页
function paginator(contacts) {
    $(".step-links").empty();
    if(contacts.has_prev){
        $(".step-links").append('<span><a page_num="'+contacts.prev_page+'">&lt;</a></span>');
    }
    $(".step-links").append('<span class="current" page_num="'+contacts.current_num+'"> Page '+contacts.current_num+' of Total '+contacts.total_nums+'.</span>');
    if(contacts.has_next){
        $(".step-links").append('<span><a page_num="'+contacts.next_page+'">&gt;</a><span>');
    }
    return contacts.objects;
}
    #可以同时显示5个页的示例
    var total = contacts.total_nums;
    var current = contacts.current_num;
    var start=0,end= 4;
    var middle;
    if(current<=3){
        middle = start+current-1;
    }else if(current>=total-1){
        middle = end - (total - current);
    }else {
        middle = (start+end)/2;
    }
    for(var i=0;i<5;i++){
        var page = current-middle+i;
        if(1<=page && page<=page_length){
            if(page ==  current){
                $(".step-links").append('<a class="current" page_num="'+page+'">'+page+'</a>');
            }else {
                $(".step-links").append('<a page_num="'+page+'">'+page+'</a>');
            }

        }
    }
    $(".step-links").append(' of Total '+total+'.&nbsp;&nbsp;&nbsp;&nbsp;</span>');

猜你喜欢

转载自blog.csdn.net/sf131097/article/details/81564275
今日推荐