Django怎么实现翻页
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章将为大家详细讲解有关Django怎么实现翻页,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、views模块导入Paginator类实现数据分页ApiTes
千家信息网最后更新 2025年11月07日Django怎么实现翻页一、views模块导入Paginator类实现数据分页
二、将views的数据渲染到前端模板上
三、效果展示
四、Paginator类源码
五、Page类源码
这篇文章将为大家详细讲解有关Django怎么实现翻页,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
一、views模块导入Paginator类实现数据分页
ApiTest/apiviews.py
每行都加了注释,希望有助于理解。
from django.shortcuts import renderfrom ApiTest.models import ApiTestfrom django.contrib.auth.decorators import login_requiredfrom django.core.paginator import Paginator, EmptyPage, PageNotAnInteger, InvalidPage@login_requireddef api_test_manage(request): username = request.session.get('user', '') # 获取所有接口测试数据 apitest_list = ApiTest.objects.all().order_by('id') # 生成Paginator对象对数据分页,每页显示10条数据 paginator = Paginator(apitest_list,10) # 使用request.GET.get()函数获取url中的page参数的数值。默认第1页 page = request.GET.get('page', 1) # 把获取的当前页码数转换成整数类型 current_page = int(page) try: # 获取查询页数的接口数据列表,page()函数会判断page实参是否是有效数字。page()函数源码附在文章的最后 apitest_list = paginator.page(page) except PageNotAnInteger: apitest_list = paginator.page(1) except (EmptyPage, InvalidPage): # paginator.num_pages apitest_list = paginator.page(paginator.num_pages) return render(request, "apitest_manage.html", {'user': username, 'apitests': apitest_list})二、将views的数据渲染到前端模板上
在对应的html文件中加入此段代码即可。
{# 上一页链接 #} {% if apitests.has_previous %} - 上一页
{% else %} - 上一页
{% endif %} {# 中间数字显示 #} {% for num in apitests.paginator.page_range %} {% if num == currentPage %} - {{ num }}
{% else %} - {{ num }}
{% endif %} {% endfor %} {# 下一页链接 #} {% if apitests.has_next %} {# 如果有下一页,则正常显示下一页链接 #} - 下一页
{% else %} - 下一页
{% endif %}
三、效果展示
四、Paginator类源码
此类主要用在views文件
class Paginator: def __init__(self, object_list, per_page, orphans=0, allow_empty_first_page=True): self.object_list = object_list self._check_object_list_is_ordered() self.per_page = int(per_page) self.orphans = int(orphans) self.allow_empty_first_page = allow_empty_first_page def validate_number(self, number): """Validate the given 1-based page number.""" try: if isinstance(number, float) and not number.is_integer(): raise ValueError number = int(number) except (TypeError, ValueError): raise PageNotAnInteger(_('That page number is not an integer')) if number < 1: raise EmptyPage(_('That page number is less than 1')) if number > self.num_pages: if number == 1 and self.allow_empty_first_page: pass else: raise EmptyPage(_('That page contains no results')) return number def get_page(self, number): """ Return a valid page, even if the page argument isn't a number or isn't in range. """ try: number = self.validate_number(number) except PageNotAnInteger: number = 1 except EmptyPage: number = self.num_pages return self.page(number) def page(self, number): """Return a Page object for the given 1-based page number.""" number = self.validate_number(number) bottom = (number - 1) * self.per_page top = bottom + self.per_page if top + self.orphans >= self.count: top = self.count return self._get_page(self.object_list[bottom:top], number, self) def _get_page(self, *args, **kwargs): """ Return an instance of a single page. This hook can be used by subclasses to use an alternative to the standard :cls:`Page` object. """ return Page(*args, **kwargs) @cached_property def count(self): """Return the total number of objects, across all pages.""" c = getattr(self.object_list, 'count', None) if callable(c) and not inspect.isbuiltin(c) and method_has_no_args(c): return c() return len(self.object_list) @cached_property def num_pages(self): """Return the total number of pages.""" if self.count == 0 and not self.allow_empty_first_page: return 0 hits = max(1, self.count - self.orphans) return ceil(hits / self.per_page) @property def page_range(self): """ Return a 1-based range of pages for iterating through within a template for loop. """ return range(1, self.num_pages + 1) def _check_object_list_is_ordered(self): """ Warn if self.object_list is unordered (typically a QuerySet). """ ordered = getattr(self.object_list, 'ordered', None) if ordered is not None and not ordered: obj_list_repr = ( '{} {}'.format(self.object_list.model, self.object_list.__class__.__name__) if hasattr(self.object_list, 'model') else '{!r}'.format(self.object_list) ) warnings.warn( 'Pagination may yield inconsistent results with an unordered ' 'object_list: {}.'.format(obj_list_repr), UnorderedObjectListWarning, stacklevel=3 )五、Page类源码
此类主要用在html文件
class Page(collections.abc.Sequence): def __init__(self, object_list, number, paginator): self.object_list = object_list self.number = number self.paginator = paginator def __repr__(self): return '' % (self.number, self.paginator.num_pages) def __len__(self): return len(self.object_list) def __getitem__(self, index): if not isinstance(index, (int, slice)): raise TypeError( 'Page indices must be integers or slices, not %s.' % type(index).__name__ ) # The object_list is converted to a list so that if it was a QuerySet # it won't be a database hit per __getitem__. if not isinstance(self.object_list, list): self.object_list = list(self.object_list) return self.object_list[index] def has_next(self): return self.number < self.paginator.num_pages def has_previous(self): return self.number > 1 def has_other_pages(self): return self.has_previous() or self.has_next() def next_page_number(self): return self.paginator.validate_number(self.number + 1) def previous_page_number(self): return self.paginator.validate_number(self.number - 1) def start_index(self): """ Return the 1-based index of the first object on this page, relative to total objects in the paginator. """ # Special case, return zero if no items. if self.paginator.count == 0: return 0 return (self.paginator.per_page * (self.number - 1)) + 1 def end_index(self): """ Return the 1-based index of the last object on this page, relative to total objects found (hits). """ # Special case for the last page because there can be orphans. if self.number == self.paginator.num_pages: return self.paginator.count return self.number * self.paginator.per_page 关于"Django怎么实现翻页"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
数据
函数
文件
源码
篇文章
链接
上一
接口
数字
文章
更多
不错
实用
有效
代码
内容
前端
参数
对象
效果
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
微聊服务器
华容县网络安全局
软件开发企业的研发成果
rust如何开服务器
东莞dsp软件开发
把控软件开发的各个流程
交换机的数据如何到云服务器
公司在长期软件开发中
网络安全教育知识讲座内容
安卓软件开发挣钱吗
金山区综合网络技术代理商
星科科技软件开发
云服务器可以放项目吗
微信聊天图片数据库设计
metlin数据库的使用
企业下单软件开发
怎样修改数据库编码
网络安全基线pdf
创乐网络技术北京有限公司
web项目连接数据库配置
软件开发公司要采购吗
关系数据库规范化程度越高则
网络安全中最重要的是防止
网络安全教育知识讲座内容
网络安全vip视频教程免费
数据库全局搜索
动漫网络安全宣传
北辰区电子网络技术答疑解惑
建党精神数据库
服务器管理口web进不去怎么办