博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django之分页
阅读量:6957 次
发布时间:2019-06-27

本文共 6885 字,大约阅读时间需要 22 分钟。

一、分页

1.初级分页

  views创建

# 创造数据USER_LIST=[]for i in range(1,999):    temp={
'name':"root"+str(i),"age":i} USER_LIST.append(temp)def index(request): per_page_count=10 # 每页显示条数 current_page=request.GET.get('p') # 获得p值 ?p=值 当前页码 current_page=int(current_page) # 变成字符串 start=(current_page-1) * per_page_count #起始位置 当前减1乘以显示条数 (根据条数分页) end=(current_page)*per_page_count #结束位置 页码 * 总条数 data=USER_LIST[start:end] 数据 范围 prve1=current_page-1 当前页-1 上一页 next1=current_page+1 当前页+1 下一页 return render(request,'index.html',{
'user_list':data,"prve1":prve1,'next1':next1})

  html

    
Title
    {
    % for i in user_list %}
  • {

    {i.name}}-------{
    { i.age }}

  • {
    % endfor %}
上一页下一页

2.进阶分页

views

# 创造数据USER_LIST=[]for i in range(1,999):    temp={
'name':"root"+str(i),"age":i} USER_LIST.append(temp)def index1(request): # Paginator的属性 # per_page 每页显示条目数量 # count:数据总页数 # num_pages:总页数 # page_range:总页面的索引范围,例如(1,10)(1,200) # page: page对象(是否具有下一页;是否具有上一页) #全部数据: current_page=request.GET.get('p') # 当前页码 paginator=Paginator(USER_LIST,11) # Paginatord对象 try: # Page对象 posts=paginator.page(current_page) posts.has_next() # 判断是否具有下一页 posts.next_page_number() # 下一页页码 posts.has_previous() # 是否具有上一页 posts.previous_page_number() # 上一页页码 # object_list # 分页之后的数据列表,已经切片好的数据 # mumber 当前页 # paginator paginator对象 except PageNotAnInteger: posts=paginator.page(1) except EmptyPage: posts=paginator.page(paginator.num_pages) return render(request,'index1.html',{
'posts':posts})
html     
Title
    {
    % for row in posts.object_list %}
  • {
    { row.name }}--{
    { row.age }}
  • {
    % endfor %}
{#{
% include 'include/pager.html'%}#}{
% if posts.has_previous %} 上一页{
% else %} 上一页{
% endif %}{
% for i in posts.paginator.pager_num_range %} {
% if i == posts.number %} {
{ i }}
{
% else%} {
{ i }}
{
% endif %}{
% endfor %}{
% if posts.has_next %} 下一页{
% endif %}{
{ posts.number }}/{
{ posts.paginator.num_pages }}

 

3升级版 分页

# 创造数据USER_LIST=[]for i in range(1,999):    temp={
'name':"root"+str(i),"age":i} USER_LIST.append(temp)自定制Paginator类class CustonPaginator(Paginator): def __init__(self,current_page,per_pager_num,*args,**kwargs): self.current_page=int(current_page) #当前页 self.per_pager_num=int(per_pager_num) # 最多显示页码 super(CustonPaginator,self).__init__(*args,**kwargs) def pager_num_range(self): # 当前页 # self.current_page # 最多显示页码 # self.per_pager_num = int(per_pager_num) # 总页数 # self.num_pages if self.num_pages
self.num_pages: # 页面最后显示没有 return range(self.num_pages-self.per_pager_num,self.num_pages+1) return range(self.current_page-part,self.current_page+part+1)
def index1(request):     #全部数据:     current_page=request.GET.get('p')     # 当前页码     paginator=CustonPaginator(current_page,7,USER_LIST,11)     try:         posts=paginator.page(current_page)     except PageNotAnInteger:         posts=paginator.page(1)     except EmptyPage:         posts=paginator.page(paginator.num_pages)     return render(request,'index1.html',{'posts':posts})

html

    
Title
    {
    % for row in posts.object_list %}
  • {
    { row.name }}--{
    { row.age }}
  • {
    % endfor %}
{
% if posts.has_previous %} 上一页{
% else %} 上一页{
% endif %}{
% for i in posts.paginator.pager_num_range %} {
% if i == posts.number %} {
{ i }}
{
% else%} {
{ i }}
{
% endif %}{
% endfor %}{
% if posts.has_next %} 下一页{
% endif %}{
{ posts.number }}/{
{ posts.paginator.num_pages }}

 

4.终极版

views

USER_LIST=[]for i in range(1,999):    temp={
'name':"root"+str(i),"age":i} USER_LIST.append(temp)def index2(request): from app01.pager import Pagination current_page=request.GET.get('p')
  if not current_page:      current_page='1'
page_obj=Pagination(len(obj_list),current_page)    data_list=USER_LIST[page_obj.start():page_obj.end()]    return render(request,'index2.html',{
'data':data_list,'page_obj':page_obj})

 

 

paper

class Pagination(object):    def __init__(self,totalCount,currentPage,perPageltemNum=10,maxPageNum=7):        self.total_count=totalCount  # 数据总个数        try:            v=int(currentPage)       #  当前页            if v<=0:                v=1            self.current_page=v        except Exception as e:            self.current_page=1        self.per_page_item_num=perPageltemNum                  #每页显示的条数        self.max_page_num=maxPageNum                               #最多显示的页码    def start(self):        return ((self.current_page-1)*self.per_page_item_num)    #     当前行    def end(self):        return self.current_page*self.per_page_item_num    @property    def num_pages(self):        '''        总页面数        :return:        '''        a,b=divmod(self.total_count,self.per_page_item_num)        if b==0:            return a        return a+1    def pager_num_range(self):        # self.num_pages()        # self.num_pages        # 当前页        # self.current_page        # 最多显示的页码数量 11        # self.per_pager_num        # 总页数        # self.num_pages       # 显示页码判断       #  总页码小于设定最大页码数        if self.num_pages
self.num_pages: return range(self.current_page,self.current_page+part+1) return range(self.current_page) def page_str(self): page_list=[] first="
  • 首页
  • " page_list.append(first) if self.current_page==1: prev="
  • 上一页
  • " else: prev="
  • 上一页
  • "%(self.current_page-1) page_list.append(prev) for i in self.pager_num_range(): if i ==self.current_page: temp="
  • %s
  • "%(i,i) else: temp="
  • %s
  • " % (i, i) page_list.append(temp) if self.current_page==self.num_pages: nex="
  • 下一页
  • " else: nex="
  • 下一页
  • " % (self.current_page + 1,) page_list.append(nex) last="
  • 尾页
  • " %(self.num_pages,) page_list.append(last) return ''.join(page_list)

     

    html

        
    Title
      {
      % for row in data %}
    • {
      { row.name }}-{
      { row.age }}
    • {
      % endfor %}
    {
    % for i in page_obj.pager_num_range %} {
    { i }}
    {
    % endfor %}

      {
      { page_obj.page_str|safe }}

     

    转载于:https://www.cnblogs.com/honglingjin/p/6553932.html

    你可能感兴趣的文章
    为什么重写equals一定要重写hashCode?
    查看>>
    HDU Problem 4006 The kth great number 【队列】
    查看>>
    win8阉割版中文输入法
    查看>>
    Codeforces VK Cup 2015 A.And Yet Another Bracket Sequence(后缀数组+平衡树+字符串)
    查看>>
    以Drools5.5为例说明“规则引擎在业务系统中应用”---起始篇
    查看>>
    linux清理内存
    查看>>
    查看硬盘负载情况:iostat命令
    查看>>
    《人月神话》阅读笔记03
    查看>>
    Linux下防火墙开启相关端口及查看已开启端口
    查看>>
    php socket 编程(一)
    查看>>
    SDUT 简单枚举类型——植物与颜色
    查看>>
    Windows 下配置Git
    查看>>
    PD的CDM模型中的三种实体关系
    查看>>
    All you should know about NUMA in VMware!
    查看>>
    java 版本SQLHelper
    查看>>
    Hyper-V中的VM如何使用Pass-through Disk
    查看>>
    黑马程序员—Java动态代理详解
    查看>>
    PHP发送HEAD方法请求
    查看>>
    OracleHelper[.Net 连接Oracle数据库的封装类]
    查看>>
    .net微信公众号开发——消息与事件
    查看>>