django结合Bootstrap样式做的,先看效果图:
在django的views中,写了一个django分页的类,以便各个需要分页的地方调用,
以下是分页类的代码:
- class paging():
- '''
- 此为文章分页功能,需要往里传递三个参数,分别如下:
- tablename:表名
- id:页码号,即第几页,这个一般从URL的GET中得到
- pagenum:每页显示多少条记录
- '''
- def __init__(self,tablename,id,pagenum):
- self.tablename = tablename
- self.page = int(id)
- self.pagenum = int(pagenum)
- tn = self.tablename.objects.all().order_by('-id') #查询tablename表中所有记录数,并以降序的方式对id进行排列
- self.p = Paginator(tn,self.pagenum) #对表数据进行分页,每页显示pagenum条
- self.p_count = self.p.count #数据库共多少条记录
- self.p_pages = self.p.num_pages #共可分成多少页
- self.p_content = self.p.page(self.page).object_list #第N页的内容列表
- self.p_isprevious = self.p.page(self.page).has_previous() #是否有上一页,返回True或False
- self.p_isnext = self.p.page(self.page).has_next() #是否有下一页,返回True或False
- #获取上一页页码号,如果try报错,说明此页为最后一页,那就设置最后一页为1
- try:
- self.p_previous = self.p.page(self.page).previous_page_number() #上一页页码号
- except:
- self.p_previous = '1'
- #获取下一页页码号,如果try报错,说明此页为最后一页,那就设置最后一页为self.p_pages
- try:
- self.p_next = self.p.page(self.page).next_page_number()
- except:
- self.p_next = self.p_pages
- #p_id获取当前页码,此变量是传递给模板用的,用于判断后,高亮当前页页码
- self.p_id = int(id)
- def p_range(self):
- '''
- 获取页码列表
- 当前页小于5时,取1-9页的列表
- 最后页减当前页,小于5时,取最后9页的列表
- 不属于以上2个规则的,则取当前页的前5和后4,共9页的列表
- '''
- if self.page < 5:
- p_list = self.p.page_range[0:9]
- elif int(int(self.p.num_pages) - self.page) < 5:
- p_list = self.p.page_range[-9:]
- else:
- p_list = self.p.page_range[self.page-5:self.page+4]
- return p_list
以下是views中,关于查看日志的后端python代码:
- def show_version(request,id):
- per = request.session
- username = per.get('username',u'访问')
- if per.get('per_global',False) != '1':
- create_db(username,'失败',u'访问前端更新记录页面,无权限' ,'系统平台','日志系统')
- return HttpResponseRedirect('404.html')
- p = paging(Ver_front,id,17)
- return render(request,'show_version.html',locals())
注:p = paging(Ver_front,id,17) 中的Ver_front是数据库表名,id是当前页(url中传递过来的),17是指每页显示17条数据。就这么简单,后代码就搞定了分页的调用,剩下 的就是前端模板部分了。
以下是models中关于Ver_front的代码(字符长度,没有做什么优化,基本都是用max_length=50):
- class Ver_front(models.Model):
- item = models.CharField(max_length=50)
- flash = models.CharField(max_length=50)
- bin = models.CharField(max_length=50)
- status = models.CharField(max_length=2)
- dtime = models.CharField(max_length=50)
以下是前端模板页中关于分页的代码:
- <div class="row-fluid">
- <div class="block">
- <a href="#tablewidget" class="block-heading" data-toggle="collapse">前端版本发布记录</a>
- <div id="tablewidget" class="block-body collapse in">
- <table class="table">
- <thead>
- <tr>
- <th>版本号</th>
- <th>项目名</th>
- <th>bin版本号</th>
- <th>flash版本号</th>
- <th>发布时间</th>
- <td>操作</td>
- </tr>
- </thead>
- <tbody>
- {% for i in p.p_content %}
- <tr>
- <td>{{i.id}}</td>
- <td>{{i.item}}</td>
- <td>{{i.bin}}</td>
- <td>{{i.flash}}</td>
- <td>{{i.dtime}}</td>
- <td>删除</td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
- </div>
- </div>
- <div>
- <div id="pagination_div1">
- <ul class="pagination" >
- 共 <span class="badge">{{p.p_count}}</span> 条记录,总 <span class="badge">{{p.p_pages}}</span> 页,当前在<span class="badge">{{id}}</span>页
- </ul>
- </div>
- <div id="pagination_div2">
- <nav>
- <ul class="pagination" >
- <li><a href="/show_version-{{p.p_previous}}.html">«</a></li>
- <li> <a href="/show_version-1.html">首页</a></li>
- {% for i in p.p_range %}
- <li {% ifequal p.p_id i %} class="active" {% endifequal %}><a href="/show_version-{{i}}.html">{{i}}</a></li>
- {% endfor %}
- <li> <a href="/show_version-{{p.p_pages}}.html">尾页</a></li>
- <li><a href="/show_version-{{p.p_next}}.html">»</a></li>
- </ul>
- </nav>
- </div>
- </div>
- </div>
关于样式,就不发了,用的是Bootstrap。用到的后端变量,都用红色粗体显示。(效果图和代码有出入,但分页效果是一样的。)
2015 年 9 月 18 日 下午 4:06 板凳
求教:views代码中的”def show_version(request,id)”,这个id是怎么传递的,注解中说“id是当前页(url中传递过来的)”,前面的提问者问道“url如何配置的”,不知道和我问这个是不是一个问题
2015 年 9 月 18 日 下午 6:40 1层
@weiran url传递id参数,我搞定了
2015 年 1 月 27 日 下午 3:04 沙发
我想问下你的url如何配置的 ? 我一直做这个分页没弄好 谢谢
2015 年 1 月 27 日 下午 7:58 1层
@wendy 使用get方式