当前位置 : 主页 > 编程语言 > python >

Django(part44)--制作分页

来源:互联网 收集:自由互联 发布时间:2022-06-15
学习笔记,仅供参考 文章目录 ​​制作分页​​ ​​第一步​​ ​​第二步​​ ​​第三步​​ 制作分页 现在,我们以Blog里的mywebsite_bookstore项目为例,对图书展示界面进行分页操

学习笔记,仅供参考



文章目录

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


制作分页



现在,我们以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 views

urlpatterns = [
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发起请求:

Django(part44)--制作分页_python

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

Django(part44)--制作分页_python_02

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



第二步



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

这里我们以百度为例:

Django(part44)--制作分页_python_03



我们对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发起请求:

Django(part44)--制作分页_django_04

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



第三步



增加上一页和下一页功能



我们对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)--制作分页_python_05

成功!

上一篇:Django(part45)--forms模块
下一篇:没有了
网友评论