学习笔记,仅供参考


文章目录

  • 制作分页
    • 第一步
    • 第二步
    • 第三步

制作分页

现在,我们以Blog里的mywebsite_bookstore项目为例,对图书展示界面进行分页操作。

第一步

对图书展示界面中的35条图书记录,以每页10条记录为标准进行分页操作,并在页面下方展示页面跳转超链接。

在templates模板文件中,我们创建一个新的模板book.html:

<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"><title>图书列表</title>
</head>
<body><a href="/bookstore/">进入书库</a> &nbsp;<a href="/">返回首页</a><table><tr><th>书名</th><th>出版社</th><th>定价</th><th>零售价</th><th>修改</th><th>删除</th></tr>{% for abook in page %}<tr><td>{{ abook.title }}</td><td>{{ abook.pub_house }}</td><td>{{ abook.price }}</td><td>{{ abook.market_price }}</td>{% if request.session.userinfo %}<td><a href="/bookstore/mod/{{ abook.title }}">修改</a></td><td><a href="/bookstore/del/{{ abook.title }}">删除</a></td>{% else %}<td colspan="2">您无权更改</td>{% endif %}</tr>{% endfor %}</table>{% for page_num in paginator.page_range %}<a href="{% url 'book' %}?page={{page_num}}">第{{page_num}}页</a>{% endfor %}
</body>
</html>

在bookstore应用下的视图模块views.py中创建视图函数book_page:

def book_page(request):bks = models.Book.objects.all()paginator = Paginator(bks, 10)print('对象的总个数是:', paginator.count)print('面码范围是:', paginator.page_range) #例如:range(1,5) 说明我们共有4页print('总页数是:', paginator.num_pages)print('每页最大个数:', paginator.per_page)cur_page = request.GET.get('page', 1)#得到查询参数,默认为第1页page = paginator.page(cur_page)return render(request, 'book.html', locals())

在bookstore应用下的urls.py模块中添加路由:

from django.urls import re_path
from . import viewsurlpatterns = [re_path(r'^$', views.homepage),re_path(r'^add/$', views.new_book),re_path(r'^list_all/$', views.list_books),re_path(r'^mod/(\w+)/$', views.mod_book_info),re_path(r'^del/(\w+)/$', views.del_book),re_path(r'^book', views.book_page, name = "book"),
]

现在,我们向http://127.0.0.1:8000/bookstore/book发起请求:

可以看到页面中显示了10条图书信息,且在页面下方出现了4个页面跳转的超链接,现在,我们点击第四页:

可以看到,第四页只有5条图书信息,同时,URL中出现了查询参数page,且查询参数值为4

第二步

在模板中增加一个判断,即对于当前页(比如目前页面在第2页),我们不(对第2页)添加跳转超链接。

这里我们以百度为例:

我们对book.html模板进行修改(仅显示超链接的代码部分):

{% for page_num in paginator.page_range %}
{% if page_num == page.number %}
第{{page_num}}页
{% else %}
<a href="{% url 'book' %}?page={{page_num}}">第{{page_num}}页</a>
{% endif %}
{% endfor %}

我们向http://127.0.0.1:8000/bookstore/book发起请求:

可以看到当前页(第一页)处没有超链接了。

第三步

增加上一页和下一页功能

我们对book.html模板进行修改(仅显示超链接的代码部分):

    {# 分页功能 #}{# 上一页功能 #}{% if page.has_previous %}{# 如果有上一页返回True #}<a href="{% url 'book' %}?page={{ page.previous_page_number }}">上一页</a>{# 返回上一页的页码,如果上一页不存在,抛出InvalidPage异常 #}{% else %}上一页{% endif %}{% for page_num in paginator.page_range %}{% if page_num == page.number %}第{{page_num}}页{% else %}<a href="{% url 'book' %}?page={{page_num}}">第{{page_num}}页</a>{% endif %}{% endfor %}{#下一页功能#}{% if page.has_next %}{# 如果有下一页返回True #}<a href="{% url 'book' %}?page={{ page.next_page_number }}">下一页</a>{% else %}下一页{% endif %}

我们向http://127.0.0.1:8000/bookstore/book发起请求:

成功!

Django(part44)--制作分页相关推荐

  1. Django(part39)--制作图书管理系统

    学习笔记,仅供参考,有错必究 文章目录 制作图书管理系统 第一步 第二步 第三步 制作图书管理系统 我们基于上一个博客Django(part38)–制作登录界面的mywebsite_bookstore ...

  2. django之快速分页

    本文介绍djanog两种分页,第一是普通分页,第二是使用haystack全文检索的分页. 1.django自带分页功能,这个功能非常好用. 基本知识点: Django提供了数据分页的类,这些类被定义在 ...

  3. Django 搜索结果分页的实现 以及点击下一页搜索条件丢失可能的原因分析

    1.Django 搜索结果分页的实现 在这里我们用django自带的分页模块来实现 这个paginator对象中带有如下属性: #per_page:每页显示条目数量 #count:数据总个数 #num ...

  4. PHP数组内容制作分页功能

    首先制作分页功能,需要使用GET传值接收页面位置 我们这里使用一个数组,通过制作分页功能来输出不同位置的数组元素 <?php for($i=1;$i<=10;$i++){$arr[$i]= ...

  5. Django的列表分页

    使用Django的Paginator分页 前后端分离 导包 from django.core.paginator import Paginator 准备数据测试 data_list = [1, 2, ...

  6. django与vue分页

    后端django进行自定义分页 1.编写自定义配置文件 from rest_framework.pagination import LimitOffsetPaginationclass LimitPa ...

  7. Django REST framework 分页

    三种分页:根据页码.根据索引.根据加密 http://www.xx.com/courses/?page=1&size=10 http://www.xx.com/courses/?offset= ...

  8. django中的分页

    分页在现在的网站应用中是非常用的,在Django 中要实现分页,是一件很简单的事情.使用Paginator,但是这种方法在小数据量,几百条时,可以使用.一旦数据大起来之后,效率就非常低下了.artic ...

  9. Django内置分页扩展

    url文件 urlpatterns = [path('admin/', admin.site.urls),path('index1.html/', views.index1), ] views文件 f ...

最新文章

  1. HashMap 和 Hashtable 的 6 个区别,最后一个没几个人知道!
  2. SpringBoot直接访问图片资源
  3. QuickPager asp.net 分页控件 转
  4. python常用函数-python常用函数精讲
  5. 用平方映射理解tanh
  6. Android -ui控件
  7. .NET Core 3.0之深入源码理解ObjectPool(一)
  8. 图解数字签名Digital Signature 和数字证书Public-key certificate
  9. mysql.net连接器_关于mysql-connector-net在C#中的用法
  10. idea maven丢失
  11. Atitit 软件与开发的未来趋势 attilax总结 1.1. Sdx软件重构世界 软件定义未来 1 1.2. 《软件和信息技术服务业发展规划(2016-2020年)》( 2 1.3. Iot物联
  12. vue项目中通过图片url下载图片
  13. comtrol 终端服务器,终端服务器:远程控制台管理———终端服务器
  14. linux卸载内核网卡驱动,Linux下网卡驱动的安装
  15. linux菜鸟入门之系统启动流程
  16. 服务器机柜规格19寸销售商贵州,聊一聊标准服务器的尺寸 常见的19英寸标准机柜尺寸...
  17. kcon 黑客大会 github
  18. 斯托曼与林纳斯的恩怨纠葛,天才往往都很固执
  19. 编程自学迷途!要知道到底自己该学习些什么,该怎样学
  20. CASIA-FaceV5亚洲人脸数据集以及对应的测试pairs文件

热门文章

  1. AttributeError: module 'networkx' has no attribute 'draw_graphviz'解决方案
  2. microsoft计算机调制管理器,Microsoft
  3. mysql 全局select授权_MySQL的用户设置与授权
  4. 机器学习(十五)——loss function比较、独立成分分析
  5. 红黑联盟c语言教程,1.1.2 C语言的特点
  6. python输出举例_python字符串格式化输出及相关操作代码举例
  7. vue 悬浮按钮_Vue@哇!几行代码实现拖拽视图组件
  8. mysql性能优化-学习笔记
  9. mybatis中foreach标签详解
  10. 【RESTful风格】软件接口设计中RESTful风格