Django 使用分页

在Django 项目中使用自带的分页模块,记录如下:

相关说明

from django.core.paginator import Paginator
objects = [‘abc‘,‘bcd‘,‘cde‘,‘def‘,‘efg‘,‘fgh‘]
p = Paginator(objects, 2)#表示传入数据集合,2 表示每页存放的数据个数
p.cout #6 表示数据总量
p.num_pages#3 表示总页数
p.per_page#2 表示每页的数量
p.object_list# [‘abc‘,‘bcd‘,‘cde‘,‘def‘,‘efg‘,‘fgh‘]  所有数据列表
p.page_range  #[1, 2, 3]   表示页数
p1 = p.page(1)#获取第一页的对象
p1.object_list#[‘abc‘, ‘bcd‘] 该页上的数据
p1.has_next()#True,判断该页是否有下一页
p1.has_previous()#False,判断该页是否有上一页
p1.has_other_pages() #判断该页是否有上或者下页
p1.start_index()# 1 p1开始的索引值
p1.end_index()#2 p1结束的索引值
p1.next_page_number()# #返回下一页的页码,如果下一页不存在,抛出InvalidPage异常
p1.previous_page_number()#返回前一页的页码,如果上一页不存在,抛出InvalidPag异常
p1.paginator#<django.core.paginator.Paginator object at 0x7f39989b2bd0> 相关paginator的对象

Django中使用分页

views.py中

from django.shortcuts import render_to_response
from django.core.paginator import Paginator, EmptyPage, InvalidPage, PageNotAnInteger
from models import *

def device_status(request):    
    All_page_info = Device_status.objects.all()   
    DataCount,page,All_page_info = All_in_one(request,All_page_info)           
    return my_render("serverinfo/device_status.html",locals(),request)

def my_render(template,data,request):
    return render_to_response(template, data, context_instance=RequestContext(request))

def getpage_id(request):
    """
        传递前端page过来的值,如果没有设置为1
    """
    page = request.GET.get("page","")
    if page:
        page = request.GET.get("page","")
    else:
        page = 1
    return page

def getpages(Data,page):
       """ 
            处理分页函数
    """
    paginator = Paginator(list(Data),2)
    try:
        Data = paginator.page(page)
    except PageNotAnInteger:
        Data = paginator.page(1)
    except EmptyPage:
        Data = paginator.page(paginator.num_pages)
    return Data,page

def All_in_one(request,All_page_info):
    DataCount = len(All_page_info)
    page = getpage_id(request)
    All_page_info,page=getpages(All_page_info,page)
    return DataCount,page,All_page_info

templates中

paginator.html  //将该模板导入需要添加分页功能的页面即可({% include ‘paginator.html‘ %})

<span class="step-links">
   {% if All_page_info.has_previous %} <!-- 是否有前一页 -->
       <a  href="?page={{ All_page_info.previous_page_number }}">上一页</a> <!-- 前一页的页码 -->
         </script>
   {% endif %}
   <span class="current">
       第 {{ All_page_info.number }}页  总 {{ All_page_info.paginator.num_pages }} 页  <!-- 总页数 -->
   </span>
   {% if All_page_info.has_next %}
       <a  href="?page={{ All_page_info.next_page_number }}">下一页</a> <!-- 后一页的页码 -->
   {% endif %}
</span>
<span>
     &nbsp;&nbsp;共{{DataCount}}条记录
</span>

效果展示:

时间: 2024-10-29 07:44:54

Django 使用分页的相关文章

django 自定义分页模块

django 自定义分页模块 from django.shortcuts import render, HttpResponse, redirect from django.utils.safestring import mark_safe class Page(object): def __init__(self, current_page): self.current_page = int(current_page) @property def start(self): return (se

django orm 分页(paginator)取数据出现警告manage.py:1: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list: &lt;class &#39;sign.models.Guest&#39;&gt; QuerySet.

使用django的orm做分页(Paginator)时出现了下面的警告 In [19]: p=Paginator(guest_list,2) manage.py:1: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list: <class 'sign.models.Guest'> QuerySet. #!/usr/bin/env python 网上搜的

Django html 分页

16.分页 django 自带的分页:django paginator 参考:https://docs.djangoproject.com/en/1.10/topics/pagination/ >>> from django.core.paginator import Paginator >>> objects = ['john', 'paul', 'george', 'ringo'] >>> p = Paginator(objects, 2) >

Django - Ajax分页

目前总结了2种方法: 1. Ajax 分页 尼玛各种google,stackoverflow,搞了好久才总结出这个,之前使用Pagination tag loading的方式不好用,并且不能进行ajax提交请求的页面无刷新的方式去分页 1.view.py 1 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 2 from django.shortcuts import render 3 def xxx

django之分页

分页 在当前网页如果特别的数据,如果不想当前网页显示太多的内容数据(例如一些文章的目录或者一些小说的章节目录很多地方都用到分页),这时候就需要用分页了. 在Django中数据被分在不同页面中,并带有“上一页/下一页”标签.这些类位于django/core/paginator.py中. 分页器Paginator Paginator.py源码 import collections from math import ceil from django.utils import six from djan

django的分页--不全也未实现

一.Django内置分页 Paginator 二.自定义分页 分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该在数据库表中的起始位置. 1.设定每页显示数据条数 2.用户输入页码(第一页.第二页...) 3.根据设定的每页显示条数和当前页码,计算出需要取数据表的起始位置 4.在数据表中根据起始位置取值,页面上输出数据 需求又来了,需要在页面上显示分页的页面.如:[上一页][1][2][3][4][5][下一页] 1.设定每页显示数据条数 2.用户输入页码(第一页.第二

django之分页插件

1 from django.utils.safestring import mark_safe 2 3 4 class Page: 5 def __init__(self, current_page, data_count, per_page_count=2, pager_num=7): 6 self.current_page = current_page 7 self.data_count = data_count 8 self.per_page_count = per_page_count

django 实现分页功能

分页效果: 视图代码: 1 # -*- coding: utf-8 -*- 2 from django.shortcuts import render,get_object_or_404 3 from django.core.paginator import Paginator,PageNotAnInteger,EmptyPage 4 5 from .models import Article 6 7 # Create your views here. 8 9 def index(request

django之分页、cookie装饰器

一.分页代码如下 from django.utils.safestring import mark_safe class Page: def __init__(self, current_page, data_count, per_page_count=10, pager_num=7): self.current_page = current_page self.data_count = data_count self.per_page_count = per_page_count self.p

Django自定义分页、bottle

一.使用django实现之定义分页 1.自定义分页在django模板语言中,通过a标签实现; 2.前段a标签使用<a href="/user_list/?page=1">1</a>,将page的值传送到函数/user_list/中,后端在user_list中通过request.GET.get('page',1)获取当前页; 3.从数据库中获取特定行的数据,使用result = models.UserList.objects.all()[start:end]获取,