分页功能模板。

先上效果图。亲测成功
在这里插入图片描述
views中写一下代码
from django.http import HttpResponse
from django.shortcuts import render

Create your views here.

from django.urls import reverse

from pages.models import UserList

def user_list(request):
#生成50条数据库信息
# for i in range(1, 12):
# dic = {‘username’: ‘name_%d’ % i, ‘age’: i}
# UserList.objects.create(**dic)
# 获取数据库信息
#定义每页条数
each_page_num = 10

#获取当前页面
current_page = request.GET.get('page',1)
#print(current_page)
#将获取的当前页转化为int
current_page = int(current_page)
#定义每页的展示条数
start = (current_page-1)*each_page_num  #10 20(current_page-1)*10
end = current_page*each_page_num #20 30 current_page*10
result = UserList.objects.all()[start:end]

#总共应该展示多少页pager_str
all_items = UserList.objects.all().count()
all_page,div= all_items.__divmod__(each_page_num)#获取整数数列及余数
# print(all_page,div)#打印总页数

if div > 0:
    all_page +=1

#拼接页码的链接
pager_str = ''
url = reverse('user_list:user_list')
#print(url)


#让页面只显示11个按钮
    #1、设置start11,end11。
    #2、这样会导致前面和后面超出去。
    #3、增加判断条件,
if all_page <=11:
    start11 = 1
    end11 = all_page+1
else:
    if current_page <= 6:
        start11 = 1
        end11 = 12

    else:
        start11 = current_page - 5
        end11 = current_page + 6
        if current_page +6 >= all_page:
            start11 =  all_page - 10
            end11 = all_page + 1

#首页尾页设置

first_page = 1
last_page = all_page

#上一页,下一页 的设置
if current_page == 1:
    global pre_page
    #设置全局变量,否则没有引用 原来在python的函数中和全局同名的变量,
    # 如果你有修改变量的值就会变成局部变量,在修改之前对该变量的引用自然就会出现没定义这样的错误了,
    # 如果确定要引用全局变量,并且要对它修改,必须加上global关键字。
    global next_page#
    pre_page = current_page
    next_page = current_page + 1
else:
    if current_page >= all_page:
        pre_page = current_page-1
        next_page = current_page
    else:#不是第一页,也没有 超过总页数,则按正常的写。
        pre_page = current_page - 1
        next_page = current_page + 1

#拼接所有页面的链接

for i in range(start11,end11):
    # 当前页高亮显示。
    if i == current_page:
        temp = '<a style="color:red;" href="%s?page=%d">%d</a> ' % (url, i, i,)
    else:
        temp = '<a style="padding: 5px" href="%s?page=%d">%d</a> ' % (url, i, i,)
    pager_str += temp
        # print(temp)

context = {
    'result':result,
    'pager_str':pager_str,
    'first_page':first_page,
    'last_page':last_page,
    'pre_page': pre_page,
    'next_page':next_page,
}
return render(request, 'user_list.html', context=context)

#将上面代码包装成class类以便调用,没包装成功,算了我还是写方法吧

class Pager(object):

def init(self, current_page):

self.current_page = int(current_page)

def start(self):

return (self.current_page-1)*10

def end(self):

return self.current_page*10

def user_list(request):

current_page = request.GET.get(‘page’,1)

page_obj = Pager(current_page)#类的实例,可以使用实例的属性

result = UserList.objects.all()[page_obj.start,page_obj.end]

return render(request, ‘user_list.html’,{‘result’:result})

下面是html中代码:

Title
{% for foo in result %} {% endfor %}
{{ foo.username }} {{ foo.age }}
首页 上一页 {{ pager_str|safe }} 下一页 尾页
</div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaWeb中实现分页功能通常需要以下步骤: 1. 在页面中添加分页控件,例如页码导航条或下拉列表等。 2. 在后台代码中获取分页相关的参数,包括当前页码、每页显示的记录数等。 3. 根据获取的参数,查询数据库获取当前页需要显示的数据,并计算出总记录数和总页数。 4. 将查询到的数据和分页相关的信息传递到页面中,供分页控件使用。 5. 在页面中根据分页信息渲染分页控件,并显示当前页的数据。 以下是一个简单的示例代码,实现了基本的分页功能: ```java // 获取当前页码和每页显示的记录数 int currentPage = Integer.parseInt(request.getParameter("page")); int pageSize = Integer.parseInt(request.getParameter("pageSize")); // 计算总记录数和总页数 int totalCount = dao.getTotalCount(); int totalPage = (totalCount + pageSize - 1) / pageSize; // 查询当前页需要显示的数据 List<Data> dataList = dao.getDataList(currentPage, pageSize); // 将分页信息和数据传递到页面 request.setAttribute("currentPage", currentPage); request.setAttribute("pageSize", pageSize); request.setAttribute("totalPage", totalPage); request.setAttribute("totalCount", totalCount); request.setAttribute("dataList", dataList); ``` 在页面中,可以使用JSP或Thymeleaf等模板引擎渲染分页控件和数据,例如: ```html <!-- 渲染页码导航条 --> <nav> <ul class="pagination"> <% for (int i = 1; i <= totalPage; i++) { %> <li class="<%= i == currentPage ? "active" : "" %>"> <a href="?page=<%= i %>&pageSize=<%= pageSize %>"><%= i %></a> </li> <% } %> </ul> </nav> <!-- 渲染当前页的数据 --> <table> <thead> <tr> <th>ID</th> <th>Name</th> <th>Value</th> </tr> </thead> <tbody> <% for (Data data : dataList) { %> <tr> <td><%= data.getId() %></td> <td><%= data.getName() %></td> <td><%= data.getValue() %></td> </tr> <% } %> </tbody> </table> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值