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

    你可能感兴趣的文章
    android:关于主工程和library project
    查看>>
    CodeForces 2A Winner
    查看>>
    Window环境配置Mongodb
    查看>>
    制作和unity调用动态链接库dll文件
    查看>>
    exsi6.0远程修改密码
    查看>>
    Header和Cookie相关内容
    查看>>
    20个可能你不知道Linux网路工具
    查看>>
    Android 关于listView 显示不全的问题
    查看>>
    构造函数创建私有变量(防继承)
    查看>>
    scrum 开发方式学习笔记
    查看>>
    Terraform使用案例
    查看>>
    Mac下brew方式安装mysql
    查看>>
    开源的任务队列服务HTQ
    查看>>
    通过微信小程序看前端
    查看>>
    [LeetCode] Rotate Function
    查看>>
    iOS - 更轻量级的 AppDelegate - 面向服务设计
    查看>>
    什么样的爬虫才是好爬虫:Robots协议探究
    查看>>
    tomcat 部署多个项目的技巧
    查看>>
    yii2使用多个数据库的案例
    查看>>
    [LintCode/LeetCode] Search Insert Position
    查看>>