首页 > 编程 > Python > 正文

Django实现分页功能

2020-02-15 22:06:46
字体:
来源:转载
供稿:网友

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

class Paginator(object):   def __init__(self, object_list, per_page, orphans=0,         allow_empty_first_page=True):    self.object_list = object_list    self.per_page = int(per_page)    self.orphans = int(orphans)    self.allow_empty_first_page = allow_empty_first_page ……

 

基本语法实例

#!/usr/bin/env python# _*_ coding:utf-8 _*_ import os from django.core.paginator import Paginatorobjects = ['john','paul','george','ringo','lucy','meiry','checy','wind','flow','rain']<br>p = Paginator(objects,3) # 3条数据为一页,实例化分页对象print p.count # 10 对象总共10个元素print p.num_pages # 4 对象可分4页print p.page_range # xrange(1, 5) 对象页的可迭代范围 page1 = p.page(1) # 取对象的第一分页对象print page1.object_list # 第一分页对象的元素列表['john', 'paul', 'george']print page1.number # 第一分页对象的当前页值 1 page2 = p.page(2) # 取对象的第二分页对象print page2.object_list # 第二分页对象的元素列表 ['ringo', 'lucy', 'meiry']print page2.number # 第二分页对象的当前页码值 2 print page1.has_previous() # 第一分页对象是否有前一页 Falseprint page1.has_other_pages() # 第一分页对象是否有其它页 True print page2.has_previous() # 第二分页对象是否有前一页 Trueprint page2.has_next() # 第二分页对象是否有下一页 Trueprint page2.next_page_number() # 第二分页对象下一页码的值 3print page2.previous_page_number() # 第二分页对象的上一页码值 1print page2.start_index() # 第二分页对象的元素开始索引 4print page2.end_index() # 第2分页对象的元素结束索引 6

 官方解释在视图中的应用

from django.core.paginator import Paginator, EmptyPage, PageNotAnIntegerfrom django.shortcuts import render def listing(request):  contact_list = Contacts.objects.all()  paginator = Paginator(contact_list, 25) # Show 25 contacts per page   page = request.GET.get('page')  try:    contacts = paginator.page(page)  except PageNotAnInteger:    # If page is not an integer, deliver first page.    contacts = paginator.page(1)  except EmptyPage:    # If page is out of range (e.g. 9999), deliver last page of results.    contacts = paginator.page(paginator.num_pages)   return render(request, 'list.html', {'contacts': contacts})

在template的html模板中的应用

{% for contact in contacts %}  {# Each "contact" is a Contact model object. #}  {{ contact.full_name|upper }}<br />  ...{% endfor %} <div class="pagination">  <span class="step-links">    {% if contacts.has_previous %}      <a href="?page={{ contacts.previous_page_number }}">previous</a>    {% endif %}     <span class="current">      Page {{ contacts.number }} of {{ contacts.paginator.num_pages }}.    </span>     {% if contacts.has_next %}      <a href="?page={{ contacts.next_page_number }}">next</a>    {% endif %}  </span></div>            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表