九、七天入门Django开发 - Django 实现博客的分页功能
2021/12/15 23:11:09
本文主要是介绍九、七天入门Django开发 - Django 实现博客的分页功能,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
当博客上发布的文章越来越多时,通常需要进行分页显示。
步骤:
Bootstarp 实现分页按钮
去Bootstarp 官网找到分页组件,把代码复制过来,微调即可
分页的html代码
D:\project\blogs\myblogs\templates\blog\index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Django Web框架</title> <!-- 最新版本的 Bootstrap 核心 CSS 文件 --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous"> <!-- 最新的 Bootstrap 核心 JavaScript 文件 --> <script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script> </head> <body> <div class="container page-header"> <h1>入门Django Web框架 <small>--- by wwh</small> </h1> </div> > <div class="container page-body"> <div class="col-md-9" role="main"> <div class="body-main"> {% for article in article_list %} <div> <h2><a href="/blog/detail/{{ article.article_id }}">{{ article.title }}</a></h2> <p> {{ article.brief_content }} </p> </div> {% endfor %} </div> <div> <nav aria-label="Page navigation"> <ul class="pagination"> <li> <a href="/blog/index?page={{ previous_page }}" aria-label="Previous"> <span aria-hidden="true">«</span> </a> </li> {% for num in page_num %} <li><a href="/blog/index?page={{ num }}">{{ num }}</a></li> {% endfor %} <li> <a href="/blog/index?page={{ next_page }}" aria-label="Next"> <span aria-hidden="true">»</span> </a> </li> </ul> </nav> </div> </div> <div class="col-md-3" role="complementary"> <div> <h2>最新文章</h2> {% for article in article_list %} <h4><a href="/blog/detail/{{ article.article_id }}">{{ article.title }}</a></h4> {% endfor %} </div> </div> </div> </body> </html>
通过 Django Pagination 实现分页
首先直接看Django官网的例子
官网例子连接:
https://docs.djangoproject.com/en/2.2/topics/pagination/
Paginator 类的常用方法
分页功能由 Django 内置的 Paginator 类提供,这个类位于 django.core.paginator 模块,需要使用它时,只需在适当的地方导入这个类即可:
首先进入python shell 模式
# 对 item_list 进行分页,每页包含 2 个数据。 item_list = ['john', 'paul', 'george', 'ringo'] p = Paginator(item_list, 2) # 取特定页的数据: # 例如 取第 2 页的数据 page2 = p.page(2) page2.object_list ['george', 'ringo'] # 查询特定页的当前页码数: page2.number 2 # 查看分页后的总页数: p.num_pages 2 # 查看某一页是否还有上一页,以及查询该页上一页的页码: # 例如 查询第二页是否还有上一页 page2.has_previous() True # 查询第二页上一页的页码 page2.previous_page_number() 1 # 查看某一页是否还有下一页,以及查询该页下一页的页码: # 例如 查询第二页是否还有下一页 page2.has_next() False
使用Django分页组件实现分页功能
在上一篇的基础上,修改 get_index_page 函数即可
views.py
def get_index_page(request): page = request.GET.get('page') # 获取 page 参数 if page: page = int(page) else: page = 1 all_article = Article.objects.all() # 获取所有文章 paginator = Paginator(all_article, 3) # 一页3篇文章 page_num = paginator.num_pages # 分页的数量 print('page num:', page_num) page_article_list = paginator.page(page) # 获取某一个的文章列表 if page_article_list.has_next(): # 如果有下一页 next_page = page + 1 # 页数加一 else: next_page = page # 否则下一页就等于当前页 if page_article_list.has_previous(): # 如果有上一页 previous_page = page - 1 # 页数减一 else: previous_page = page # 否则上一页就等于当前页 return render(request, 'blog/index.html', { 'article_list': page_article_list, 'page_num': range(1, page_num + 1), 'curr_page': page, # 当前页面 'next_page': next_page, # 上一页 'previous_page': previous_page, # 下一页 } )
以上就实现了分页功能
这篇关于九、七天入门Django开发 - Django 实现博客的分页功能的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20MongoDB教程:从入门到实践详解
- 2024-11-17执行 Google Ads API 查询后返回的是空数组什么原因?-icode9专业技术文章分享
- 2024-11-17google广告数据不同经理账户下的凭证可以获取对方的api数据吗?-icode9专业技术文章分享
- 2024-11-15SendGrid 的 Go 客户端库怎么实现同时向多个邮箱发送邮件?-icode9专业技术文章分享
- 2024-11-15SendGrid 的 Go 客户端库怎么设置header 和 标签tag 呢?-icode9专业技术文章分享
- 2024-11-12Cargo deny安装指路
- 2024-11-02MongoDB项目实战:从入门到初级应用
- 2024-11-01随时随地一键转录,Google Cloud 新模型 Chirp 2 让语音识别更上一层楼
- 2024-10-25Google Cloud动手实验详解:如何在Cloud Run上开发无服务器应用
- 2024-10-24AI ?先驱齐聚 BAAI 2024,发布大规模语言、多模态、具身、生物计算以及 FlagOpen 2.0 等 AI 模型创新成果。