博客
关于我
强烈建议你试试无所不能的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

    你可能感兴趣的文章
    快讯 | 旷视科技Face++宣布完成C轮4.6亿美元融资,刷新AI领域融资纪录
    查看>>
    摘自《代码阅读方法与实践》
    查看>>
    新华网与阿里合资创立云计算公司
    查看>>
    浅谈互联网医疗面临的挑战
    查看>>
    Squirrel 连接Hive
    查看>>
    【天池直播】天池线上赛自定义函数实践
    查看>>
    普通企业站的seo优化策略
    查看>>
    如何使用VMware ThinApp一步步虚拟化应用
    查看>>
    WebHook 自动化部署和运维工具 git-webhook
    查看>>
    R语言中的哪些命令或者包让你相见恨晚
    查看>>
    美团Apache Kylin精确去重指标优化历程
    查看>>
    如何在Linux中不输入密码运行sudo命令
    查看>>
    美国如何保护关键信息基础设施
    查看>>
    《 自动化测试最佳实践:来自全球的经典自动化测试案例解析》一一第2章 终极数据库自动化...
    查看>>
    瑞银集团:金融科技服务在这一领域最具威胁
    查看>>
    加拿大可再生能源发电已达66%的比例
    查看>>
    天合光能组件出货引领印度太阳能市场 2016年市场份额达25.7%
    查看>>
    再战“6.18”销售额榜首,韩都衣舍究竟“凭什么!”
    查看>>
    看看淘宝的工程师如何评论12306
    查看>>
    Linux之:最常用的20条命令
    查看>>