编辑
2024-04-14
Python
00

目录

Django 分页功能整理
分页流程
示例代码
1. 创建分页处理类
2. 生成分页 HTML 导航
3. 视图函数中处理分页逻辑
4. 模板显示分页
分页功能总结

Django 分页功能整理

分页是网站中常见的功能,用于将数据拆分成多页显示。以下是实现分页的详细步骤及示例代码。

分页流程

  1. 设定每页显示数据条数

    • 确定每页展示多少条数据,如每页显示5条。
  2. 用户输入页码

    • 用户通过分页按钮选择页码(如第一页、第二页等)。
  3. 计算起始位置

    • 根据设定的每页显示条数和当前页码,计算数据在数据库中的起始位置。
  4. 查询数据库

    • 根据起始位置查询对应页码的数据。
  5. 生成分页导航

    • 根据当前页和总页数,生成分页按钮,如 [上一页][1][2][3][4][5][下一页]

示例代码

1. 创建分页处理类
python
#!/usr/bin/env python # -*- coding:utf-8 -*- from django.utils.safestring import mark_safe class PageInfo(object): def __init__(self, current, totalItem, peritems=5): """ :param current: 当前页码 :param totalItem: 数据总条数 :param peritems: 每页显示条数(默认 5 条) """ self.__current = current self.__peritems = peritems self.__totalItem = totalItem # 获取数据表中的起始位置 def From(self): return (self.__current - 1) * self.__peritems # 获取数据表中的结束位置 def To(self): return self.__current * self.__peritems # 计算总页数 def TotalPage(self): result = divmod(self.__totalItem, self.__peritems) if result[1] == 0: return result[0] else: return result[0] + 1
2. 生成分页 HTML 导航
python
def Custompager(baseurl, currentPage, totalpage): perPager = 11 # 设置每页显示 11 个页码按钮 begin = 0 end = 0 # 如果总页数小于 11,显示全部页码 if totalpage <= 11: begin = 0 end = totalpage else: # 当前页大于 5,显示以当前页为中心的分页 if currentPage > 5: begin = currentPage - 5 end = currentPage + 5 if end > totalpage: end = totalpage else: begin = 0 end = 11 pager_list = [] # 首页按钮 if currentPage <= 1: first = "<a href=''>首页</a>" else: first = "<a href='%s%d'>首页</a>" % (baseurl, 1) pager_list.append(first) # 上一页按钮 if currentPage <= 1: prev = "<a href=''>上一页</a>" else: prev = "<a href='%s%d'>上一页</a>" % (baseurl, currentPage - 1) pager_list.append(prev) # 中间页码按钮 for i in range(begin + 1, end + 1): if i == currentPage: temp = "<a href='%s%d' class='selected'>%d</a>" % (baseurl, i, i) else: temp = "<a href='%s%d'>%d</a>" % (baseurl, i, i) pager_list.append(temp) # 下一页按钮 if currentPage >= totalpage: next = "<a href='#'>下一页</a>" else: next = "<a href='%s%d'>下一页</a>" % (baseurl, currentPage + 1) pager_list.append(next) # 末页按钮 if currentPage >= totalpage: last = "<a href=''>末页</a>" else: last = "<a href='%s%d'>末页</a>" % (baseurl, totalpage) pager_list.append(last) # 将分页按钮拼接成 HTML 代码 result = ''.join(pager_list) return mark_safe(result) # 将字符串标记为安全的 HTML
3. 视图函数中处理分页逻辑
python
from django.shortcuts import render from .models import MyModel from .pagination import PageInfo, Custompager def my_view(request): current_page = int(request.GET.get('page', 1)) # 获取当前页码,默认为第一页 total_items = MyModel.objects.count() # 获取数据总条数 page_info = PageInfo(current_page, total_items, peritems=5) # 实例化分页对象 # 查询当前页的数据 data_list = MyModel.objects.all()[page_info.From():page_info.To()] # 生成分页 HTML pager = Custompager('/myview/?page=', current_page, page_info.TotalPage()) return render(request, 'my_template.html', {'data_list': data_list, 'pager': pager})

4. 模板显示分页

在模板中输出分页导航条:

html
<div> {% for item in data_list %} <!-- 显示数据 --> <p>{{ item.name }}</p> {% endfor %} </div> <div class="pagination"> {{ pager }} </div>

分页功能总结

  1. 创建处理分页数据的类PageInfo 类负责计算数据的起始和结束位置以及总页数。
  2. 根据分页数据获取数据:视图函数根据当前页和每页条数,从数据库中获取对应页的数据。
  3. 输出分页 HTML:通过 Custompager 函数生成分页按钮的 HTML 代码,并在页面上渲染。

这种方式可以灵活控制分页展示方式,满足分页功能的需求,如显示页码范围、上一页/下一页、首页/末页按钮等。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:GYC

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!