当前位置: 首页 > news >正文

Django学习教程(十七)Django分页功能实现

Django学习教程(十七)Django分页功能实现

  • 前言
  • 1.导入分页类
  • 2.修改文章列表视图
  • 3.修改列表模板
  • 4.添加分页按钮
  • 5.访问测试
  • 6.常用分页属性
  • 7.总结

前言

上一篇我们实现了文章详情页中的上一篇和下一篇跳转。这一篇我们继续完善博客列表页,实现分页功能。

如果博客文章比较多,全部显示在一个页面中就不太合适,所以需要分页展示。

1.导入分页类

Django中提供了Paginator类,可以用来实现分页。

代码:

from django.core.paginator import Paginator

2.修改文章列表视图

打开views.py文件,修改article_list方法。

代码:

from django.shortcuts import render from django.core.paginator import Paginator from .models import Article def article_list(request): articles = Article.objects.all().order_by('-created_time') paginator = Paginator(articles, 5) page_number = request.GET.get('page') page_obj = paginator.get_page(page_number) return render(request, 'blog/article_list.html', {'page_obj': page_obj})

这里的Paginator(articles, 5)表示每页显示5条数据。

request.GET.get('page')表示获取地址栏中的page参数。

3.修改列表模板

article_list.html中遍历page_obj。

代码:

{% for article in page_obj %} <div class="card mb-3"> <div class="card-body"> <h5 class="card-title">{{ article.title }}</h5> <p class="card-text">{{ article.content }}</p> <a href="/article/{{ article.id }}/" class="btn btn-primary">查看详情</a> </div> </div> {% endfor %}

4.添加分页按钮

在文章列表下面添加分页。

代码:

<nav> <ul class="pagination"> {% if page_obj.has_previous %} <li class="page-item"> <a class="page-link" href="?page={{ page_obj.previous_page_number }}">上一页</a> </li> {% endif %} <li class="page-item active"> <span class="page-link"> {{ page_obj.number }} </span> </li> {% if page_obj.has_next %} <li class="page-item"> <a class="page-link" href="?page={{ page_obj.next_page_number }}">下一页</a> </li> {% endif %} </ul> </nav>

5.访问测试

访问首页:

http://127.0.0.1:8000/

访问第二页:

http://127.0.0.1:8000/?page=2

如果文章数量超过每页显示数量,就可以看到分页效果。

6.常用分页属性

常用分页属性有:

  1. page_obj.has_previous 是否有上一页
  2. page_obj.previous_page_number 上一页页码
  3. page_obj.has_next 是否有下一页
  4. page_obj.next_page_number 下一页页码
  5. page_obj.number 当前页码

7.总结

这一篇我们学习了Django中的分页功能,主要使用了Paginator类。

分页功能在博客、电商、后台管理系统中都非常常见,大家可以多敲几遍代码,加深理解。好了这一篇就到这里,下一篇我们继续学习实现最近文章列表,如果对你有帮助,点赞加关注,下篇见。

http://www.jsqmd.com/news/1079515/

相关文章:

  • 2026年AI微入口供应商避坑指南:选对靠谱伙伴
  • WD5081,6.5V~90V,1A异步降压转换器,高集成度、低成本
  • SGP41环境传感器实战:从原理到智能家居空气质量监测应用
  • HTTP 403绕过实战:从权限校验到未授权访问的攻防解析
  • 开源BuildingAI企业级实战:智能体+知识库+RAG一站式办公平台
  • 阿联酋原油出口恢复八成五,原油期货供应扰动与市场影响分析
  • 星纵物联WS50x智能开关面板,开关升级一步到位
  • MySqL(三)数据操作语言DML和数据查询语言DQL详细讲解(练习,笔记,注意点)
  • 算法设计中的鸽巢原理、归约与组合设计应用
  • 旋进旋涡流量计可以测量哪些介质呢?
  • 数据要素市场化背景下,数据中台如何演进为企业数据资产化的技术枢纽?
  • NAS、网盘、本地电影太多,播放器怎么选?VidHub、Infuse、nPlayer、Jellyfin、Plex 适合谁?
  • 还在百度查 Linux 命令?我把常用命令做成了网站,一行 Docker 部署到内网
  • Okbiye AI 写作数据分析模块:一键生成实证报告,破解社科论文数据处理难题
  • 熵与分布(更懂「犹豫」):整个候选分布有多分散; P(True) 自评估:追加一个问题「上述答案是否正确?(A) True (B) False」,再看 logprob;
  • MuleSoft+LLM企业级AI编排实战:构建可治理的意图路由系统
  • 2026年用Gemini镜像站解决Java微服务架构难题
  • 孩子挑食、面色黄、总生病?可能缺的不是饭,是“营养素”
  • 雷电模拟器部署Frida全攻略:从环境配置到Hook实战
  • 我用QClaw的命理大师体验玄学,AI结果令我震惊了
  • 阿里云PolarDB MySQL版完全使用指南:从集群创建到SQL语法实战
  • 数字最有说服力,没数据怎么办?用AI简历工具帮你做“类比表达”
  • HandheldCompanion:终极Windows掌机游戏体验优化方案
  • 芯片 OpenAI 联合博通发布首款自研推理芯片 Jalapeño
  • 【每天认识一个国家 | 墨西哥】
  • MySQL 事务 ACID 四大特性 + 四大隔离级别(面试高频考点)
  • 程序员开始分成两派了!真的会谢
  • 综合医院+专科医院地下停车场照明节能改造 分区域精准节能
  • Ice终极指南:解锁macOS菜单栏管理新境界
  • 大语言模型幻觉成因与事实一致性优化实践