Django--分页功能
需要用到django中的Paginator模块
导入:from django.core.paginator import Paginator
本案例以图书管理为模版
class BorrowBook(models.Model):
"""
借出图书查询
"""
reader = models.ForeignKey(Reader, on_delete=models.CASCADE)
# manager = models.ForeignKey(Manager, on_delete=models.CASCADE)
borrow_book = models.DateTimeField(auto_now_add=True)
restore_book = models.DateTimeField()
book_state = models.CharField(max_length=50)
books = models.ForeignKey(Books, on_delete=models.CASCADE)
数据库中的数据
开始分页制作
-
导入分页模块
from django.core.paginator import Paginator
-
查询所有数据列表queryset对象
book_list = BorrotBook.objects.all()
-
实例化对象
paginator = Paginator(book_list, 10)
-
Paginator类对象的属性
序号 属性名 说明 1 num_pages 返回分页之后的总页数 2 page_range 返回分页后的页码列表 -
Paginator类对象的方法
序号 方法名 说明 1 page(self, number) 返回第number页的page类实例对象 -
Page实例对象的属性
序号 属性名 说明 1 number 返回当前页的页码 2 object_list 返回当前页的数据查询集 3 paginator 返回对应的Paginator类对象 -
page实例对象的方法
序号 方法名 说明 1 has_previous 判断当前页是否有前一页 2 has_next 判断当前页是否有下一页 3 previous_page_number 返回前一页的页码 4 next_page_number 返回下一页的页码
写views函数
# 带返回值参数的views函数
def borrow_show(request, pindex):
"""
已借图书查询并展示到前端页面
"""
book_obj = BorrowBook.objects.all() # 获取借书表中所有的数据
book_list = [] # 创建一个空列表,存放当前登陆人所借过的书
for i in book_obj: # 遍历所有的借书记录,查找到当前登陆人所借的书,并放入空列表
if i.reader.read_code == request.session["user_id"]:
book_list.append(i)
paginator = Paginator(book_list, 5) # 实例化Paginator, 每页显示5条数据
if pindex == "": # django中默认返回空值,所以加以判断,并设置默认值为1
pindex = 1
else: # 如果有返回在值,把返回值转为整数型
int(pindex)
page = paginator.page(pindex) # 传递当前页的实例对象到前端
context = {"message": request.session["user_name"], "page": page}
return render(request, "books/borrow_show.html", context)
urls配置
from django.urls import path
from .import views
app_name = "books"
urlpatterns = [
# 已借图书查询并展示
path("borrow_show/<pindex>", views.borrow_show, name="borrow_show"),
]
Html中配置
<--当前页内容遍历展示-->
{%for item in page%}
<tr>
<td width="120px">{{forloop.counter}}</td>
<td width="150px"><a href="" style="color: #0f0f0f"> {{item.books.book_name}}</a></td>
<td width="120px">{{item.books.book_author}}</td>
<td width="120px">{{item.books.book_price}}</td>
<td width="120px">{{item.books.book_concern}}</td>
<td width="120px">{{item.books.book_type.book_type}}</td>
<td width="120px">{{message}}</td>
<td width="120px">{{item.borrow_book}}</td>
</tr>
{%endfor%}
<--底部分页按钮显示-->
<nav aria-label="Page navigation">
<div class="pagination">
<ul class="pagination">
{% if page.has_previous %} # 判断当前页是否有上一页
<li><a href="/books/borrow_show/{{page.previous_page_number}}" aria-label="Previous">
<span aria-hidden="true">«</span></a></li>
{% endif %}
{% for num in page.paginator.page_range%} # 循环遍历页码列表,并展示到底部
{%if pindex == page.number%}
<li><a href="">{{ num }}</a></li>
{%else%}
<li><a href="/books/borrow_show/{{num}}">{{ num }}</a></li>
{%endif%}
{% endfor %}
{% if page.has_next %} # 判断当前页是否有下一页
<li><a href="/books/borrow_show/{{page.next_page_number}}" aria-label="Next">
<span aria-hidden="true">»</span></a></li>
{% endif %}
</ul>
</div>
</nav>