django分页功能的具体实现

django提供了paginator类来帮助管理分页数据,这个类存放在django/core/paginator.py.它可以接收列表、元组或其它可迭代的对象。

基本语法示例:

 1 #!/usr/bin/env python
 2 # _*_ coding:utf-8 _*_
 3  
 4 import os
 5  
 6 from django.core.paginator import Paginator
 7 objects = ['john','paul','george','ringo','lucy','meiry','checy','wind','flow','rain'] # 演示用分类数据源
 8 p = Paginator(objects,3)  # 实例化分页对象,将objects 3条数据分为一页,
 9 print p.count  # 10 对象总数
10 print p.num_pages  # 4 对象总页数
11 print p.page_range  # xrange(1, 5) 对象页的可迭代列表【元组】
12  
13 page1 = p.page(1)  # 取对象的第1分页对象
14 print page1.object_list  # 第1分页对象的元素列表['john', 'paul', 'george']
15 print page1.number  # 第1分页对象的当前页值 1
21 print page1.has_previous() # 第1分页对象是否有前一页 False 22 print page1.has_other_pages() # 第1分页对象是否有其它页 True 24 print page2.has_previous() # 第1分页对象是否有前一页 True 25 print page1.has_next() # 第1分页对象是否有下一页 True 26 print page1.next_page_number() # 第1分页对象下一页码的值 3 27 print page1.previous_page_number() # 第1分页对象的上一页码值 1 28 print page1.start_index() # 第1分页对象的元素开始索引 4 29 print page1.end_index() # 第1分页对象的元素结束索引 6

官方应用示例:

后台views.py代码:

 1 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
 2 from django.shortcuts import render
 3  
 4 def listing(request):
 5     contact_list = Contacts.objects.all()
 6     paginator = Paginator(contact_list, 25) # Show 25 contacts per page
 7  
 8     page = request.GET.get('page')
 9     try:
10         contacts = paginator.page(page)
11     except PageNotAnInteger:
12         # If page is not an integer, deliver first page.
13         contacts = paginator.page(1)
14     except EmptyPage:
15         # If page is out of range (e.g. 9999), deliver last page of results.
16         contacts = paginator.page(paginator.num_pages)
17  
18     return render(request, 'list.html', {'contacts': contacts})

前台模板代码

 1 {% for contact in contacts %}
 2     {# Each "contact" is a Contact model object. #}
 3     {{ contact.full_name|upper }}<br />
 4     ...
 5 {% endfor %}
 6  
 7 <div class="pagination">
 8     <span class="step-links">
 9         {% if contacts.has_previous %}
10             <a href="?page={{ contacts.previous_page_number }}">previous</a>
11         {% endif %}
12  
13         <span class="current">
14             Page {{ contacts.number }} of {{ contacts.paginator.num_pages }}.
15         </span>
16  
17         {% if contacts.has_next %}
18             <a href="?page={{ contacts.next_page_number }}">next</a>
19         {% endif %}
20     </span>
21 </div>

 

转载于:https://www.cnblogs.com/ailex/p/10062257.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django实现前后端分离的分页功能模块可以通过以下步骤进行: 1. 后端实现: - 创建一个 Django 视图函数,用于处理分页请求。可以使用 Django 的内置分页器类 `Paginator` 来实现分页功能。 - 在视图函数中,获取前端传递过来的当前页码和每页显示的数量。可以通过 `request.GET` 获取 GET 请求中的参数。 - 使用 `Paginator` 类对数据进行分页,并获取当前页的数据。 - 将分页结果和当前页码等信息封装成 JSON 格式返回给前端。 2. 前端实现: - 在前端页面中,通过 AJAX 或者其他方式发送分页请求到后端视图函数。 - 在接收到后端返回的 JSON 数据后,解析数据并渲染到页面上,显示分页结果。 - 创建前端的分页组件,包括上一页、下一页、跳转等功能,以便用户进行翻页操作。 下面是一个简单的示例代码: 后端实现(views.py): ```python from django.core.paginator import Paginator from django.http import JsonResponse def get_paginated_data(request): data = ['item1', 'item2', 'item3', 'item4', 'item5', 'item6', 'item7', 'item8', 'item9', 'item10'] paginator = Paginator(data, 3) # 每页显示3条数据 page_number = request.GET.get('page') # 获取当前页码,默认为1 page_obj = paginator.get_page(page_number) current_page = page_obj.number total_pages = paginator.num_pages items = page_obj.object_list response_data = { 'current_page': current_page, 'total_pages': total_pages, 'items': items, } return JsonResponse(response_data) ``` 前端实现(JavaScript): ```javascript function getPaginatedData(page) { $.ajax({ url: '/get_paginated_data/', type: 'GET', data: {page: page}, success: function (response) { // 解析后端返回的 JSON 数据 var current_page = response.current_page; var total_pages = response.total_pages; var items = response.items; // 渲染数据到页面上 // ... }, error: function (xhr, status, error) { console.log(error); } }); } // 页面加载完成后,获取第一页的数据 $(document).ready(function () { getPaginatedData(1); }); // 翻页按钮点击事件 $('.pagination-button').click(function () { var page = $(this).data('page'); getPaginatedData(page); }); ``` 以上代码仅为示例,具体实现方式可能因项目需求而有所不同。你可以根据实际情况进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值