当前位置: 代码迷 >> 综合 >> Django异步请求分页的实现
  详细解决方案

Django异步请求分页的实现

热度:60   发布时间:2024-01-21 03:43:57.0

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