django修改成ajax分页,Django+Paginator+ajax动态加载分页顶

本文介绍了如何在Django中使用Paginator进行分页,并结合Ajax实现页面内容的动态加载,避免整个页面刷新。讲解了Paginator的核心对象及其属性,并提供了urls.py、views.py和HTML模板的代码示例,展示了分页功能的实现过程。同时,文章还展示了使用layui框架的前端效果。
摘要由CSDN通过智能技术生成

Django+Paginator+ajax动态加载分页

django轻量级分页模块Paginator,怎么做到切换页面而不刷新整个页面呢?

其实实现起来很简单,思路:Paginator后端拆分好(如:共多少页;当前第几页;这一页的内容是什么?),通过Ajax交互数据展示。

Paginator两个核心对象介绍(Paginator, page)

Paginator

per_page: 每页显示记录数量

count:数据总个数

num_pages:总页数

page_range:总页数的索引范围,如: (1,10),(1,200)

page:page对象 page(2) 代表第二页数据的对象

Page

has_next:是否有下一页

has_previous:是否有上一页

next_page_number:下一页页码

previous_page_number:上一页页码

object_list:分页之后的当前页数据列表

number:当前页

paginator:paginator对象,父类对象

贴代码,希望能和大家一起学习交流。

urls.py

from app import views

urlpatterns = [

path('console/', views.console, name='console'),

]

views.py

from django.http import JsonResponse

from django.core.paginator import Paginator, PageNotAnInteger, InvalidPage

from

# 我这里的'user'为调用models的展示的数据

def console(request):

# 所有数据

user_list = User.objects.all()

# 分页功能,一页7条数据

paginator = Paginator(user_list, 7)

if request.method == 'GET':

# 默认显示第一页的数据

users = paginator.page(1)

return render(request, 'system/console.html', {'users': users})

# Ajax数据交互

if request.is_ajax():

page = request.GET.get('page')

try:

users = paginator.page(page)

# 如果页数不是整数,返回第一页

except PageNotAnInteger:

users = paginator.page(1)

# 如果页数不存在/不合法,返回最后一页

except InvalidPage:

users = paginator.page(paginator.num_pages)

user_li = list(users.object_list.values())

# 分别为是否有上一页false/true,是否有下一页false/true,总共多少页,当前页面的数据

result = {'has_previous': users.has_previous(),

'has_next': users.has_next(),

'num_pages': users.paginator.num_pages,

'user_li': user_li}

return JsonResponse(result)

console.html

样式用到的是国产框架类UI(layui),用到内容:静态表格,按钮样式

layui传送门

//默认第一页的内容

{% for u in users %}

{% endfor %}

用户

身份

性别

电话

邮箱

最近登录

加入时间

更新时间

{{ u.username }}

{{ u.is_rank }}

{{ u.sex }}

{{ u.phone }}

{{ u.email }}

{{ u.last_login }}

{{ u.date_joined }}

{{ u.update_time }}

上一页

// 页数便利出来

{% for num in users.paginator.page_range %}

{{ num }}

{% endfor %}

共{{ users.paginator.num_pages }}页

下一页

ajax部分

工具jQuery3.4.1

jQuery传送门

效果图

22747787cbb78da63575f3d0e56af2a5.png

或许还有更加高级的方法,这只是其中方法的一种,希望能和大家一起交流分享学习。

03d45a7f7a3d450771c6f9f9541b1c9f.png

文章来源: www.oschina.net,作者:Tao吖,版权归原作者所有,如需转载,请联系作者。

原文链接:https://my.oschina.net/u/4441730/blog/3164854

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值