在我们平时浏览网页时,经常会遇到网页里条目很多的情形,这时就会用到分页展示的功能。那么,在Django中,是如何实现网页分类的功能的呢?答案是Paginator类。

本次分享讲具体展示如何利用Django的Paginator类来实现网页的分页展示功能。

首先我们要展示的内容是159首陶渊明的诗歌,它们储存在'/home/vagrant/poem.txt'文件中。

默认的不分页的网页(page.html)如下:

其模板的代码如下:

 <ul>
{% for contact in contacts %}
<li>{{contact}}<br><br></li>
{% endfor %}
</ul> <div>
<center>
{% if contacts.has_previous %}
<a href="?page={{ contacts.previous_page_number }}"> 上一页</a>
{% endif %}
<span>
{% for p in contacts.paginator.page_range %}
{% ifequal p contacts.number %}
<span class="current">{{p}}</span>
{% else %}
<a href="?page={{p}}" title="第{{p}}页"><button>{{p}}</button></a>
{% endifequal %}
{% endfor %}
</span>
{% if contacts.has_next %}
<a href="?page={{ contacts.next_page_number }}">下一页 > </a>
{% endif %}
<a>[page:{{ contacts.number }}/{{ contacts.paginator.num_pages }}]</a>
</center>
</div> <br>
<form action="/fenye/" method="get">
<center>
<select name='items'>
<option value='10' checked="checked">10 items each page</option>
<option value='15'>15 items each page</option>
<option value='20'>20 items each page</option>
</select>
<input type="submit" value="select">
</center>
</form>

该网页中的数字按钮可连接到对应的页码,当然也可以用‘下一页’链接。也可以自由选择每页需要显示的条目数量,如下:

选择好条目数,在点击select按钮,可链接到如下页面:

这个页面(fenye.html)显示每页10条,可以点击按钮‘Return To Original Page’回到刚才的页面(page.html)。该页面(fenye.html)的模板代码如下:

 <ul>
{% for contact in contacts %}
<li>{{contact}}<br><br></li>
{% endfor %}
</ul> <div>
<center>
{% if contacts.has_previous %}
<a href="?page={{ contacts.previous_page_number }}"> 上一页</a>
{% endif %}
<span>
{% for p in contacts.paginator.page_range %}
{% ifequal p contacts.number %}
<span class="current">{{p}}</span>
{% else %}
<a href="?page={{p}}" title="第{{p}}页"><button>{{p}}</button></a>
{% endifequal %}
{% endfor %}
</span>
{% if contacts.has_next %}
<a href="?page={{ contacts.next_page_number }}">下一页 > </a>
{% endif %}
<a>[page:{{ contacts.number }}/{{ contacts.paginator.num_pages }}]</a>
</center>
</div>
<center>
<br>
<button onclick="window.location.href='http://localhost:8000/page'">Return To Original Page</button>
</center>

最后,我们的后端views.py代码如下:

 from django.http import HttpResponse
from django.shortcuts import render_to_response
from django.utils.datastructures import MultiValueDictKeyError
from django.core.paginator import Paginator,PageNotAnInteger,EmptyPage #show items in default
def output(request):
# get items show on the page from poems.txt
with open('/home/vagrant/poems.txt', 'r') as f:
text = f.readlines() items_each_page = 15 # how many items in each page
paginator = Paginator(text, items_each_page)
page = request.GET.get('page') # 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_to_response('page.html',{'contacts': contacts}) #show items by your choice
def output2(request):
with open('/home/vagrant/poems.txt', 'r') as f:
text = f.readlines() try:
#try to get 'items', if None or failed, do nothing.
a = request.GET.get('items')
if str(a) != 'None':
with open('/home/vagrant/num.txt', 'w') as f:
f.write(a)
except:
pass with open('/home/vagrant/num.txt','r') as f:
items_each_page = int(f.read()) paginator = Paginator(text, items_each_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_to_response('fenye.html',{'contacts': contacts})

这样,我们就基本实现了在Django中网页分页展示的功能,而且能够自己选择每一页需要展示的条目的数量,这显然是非常方便使用的。

本次分享到此结束,如有问题,欢迎大家交流与批评~~

Django学习(5)优雅地分页展示网页的更多相关文章

  1. Django 学习笔记之七 实现分页

    接着上篇,在上篇的基础上实现网页数据分页显示 1.打开views.py,编辑如下 #coding:utf-8from django.shortcuts import render,get_object ...

  2. Django学习手册 - 初识自定义分页

    核心: <a href='http://127.0.0.1:8000/index-%s'>%s<a> 自定义分页 1.前端处理字符 后端的字符  return render(r ...

  3. Django学习笔记(二):使用Template让HTML、CSS参与网页建立

    Django学习笔记(二):使用Template让HTML.CSS参与网页建立 通过本文章实现: 了解Django中Template的使用 让HTML.CSS等参与网页建立 利用静态文件应用网页样式 ...

  4. Django学习笔记(1)——初识Django

    一:Web框架介绍 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以快速帮你开发特定的系统. Web框架是别人已经设定好的一个web网站模板,你学习它 ...

  5. Django学习笔记(20)——BBS+Blog项目开发(4)Django如何使用Bootstrap

    本文学习如何通过Django使用Bootstrap.其实在之前好几个Django项目中已经尝试使用过了Bootstrap,而且都留有学习记录,我已经大概有了一个大的框架,那么本文就从头再走一遍流程,其 ...

  6. Django学习(4)表单,让数据库更美好

    表单,在HTML中的标签为<form></form>,在网页中主要负责数据采集功能.我们在浏览网站时,常常会碰到注册账号.账号登录等,这就是表单的典型应用. 在Django学习 ...

  7. Django学习笔记(13)——Django的用户认证(Auth)组件,视图层和QuerySet API

    用户认证组件的学习 用户认证是通过取表单数据根数据库对应表存储的值做比对,比对成功就返回一个页面,不成功就重定向到登录页面.我们自己写的话当然也是可以的,只不过多写了几个视图,冗余代码多,当然我们也可 ...

  8. Python框架之Django学习笔记(十七)

    Django框架之表单(续二) 今天的这篇博客将是Django学习笔记博客的最后一篇,基本每周最少一篇的Django框架学习,坚持到今天也实属不易,当然了,这个框架的学习仅仅是Django框架的基础部 ...

  9. Django学习笔记(16)——扩展Django自带User模型,实现用户注册与登录

    一,项目题目:扩展Django自带User模型,实现用户注册与登录 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册,登录,用户认证,注销,修改密码等功能. ...

随机推荐

  1. IOS xib和代码自定义UIView

    https://www.jianshu.com/p/1bcc29653085 总结的比较好 iOS开发中,我们常常将一块View封装起来,以便于统一管理内部的子控件. 下面就来说说自定义View的封装 ...

  2. 2019.02.28 bzoj4199: [Noi2015]品酒大会(sam+线段树)

    传送门 题意:给一个串,每个位置有一个权值,当S[s...s+len−1]=S[t...t+len−1]&&S[s...s+len]̸=S[t..t+len]S[s...s+len-1 ...

  3. myeclipse 自动部署web项目(自动编译)

    打开自动编译:project->build automatically; 注:以下两种方法适用tomcat配置在myeclipse中的情况. 1.如果在myeclipse中tomcat是以deb ...

  4. Django——用户认证和判断用户是否登录

    用户认证 必须通过认证之后才能login(request,user)这样才能保存会话到request中,注销后会话结束 注意 自定义的用户登陆时只不止需要验证用户名和密码的需要写认证,就例如在线教育平 ...

  5. Java连接MySQL数据库详细教程(附网盘下载地址)

    准备工具 Eclipse-oxygen-64位 http://pan.baidu.com/s/1gf48FIj MySQL-5.7.17 http://pan.baidu.com/s/1skD14Cl ...

  6. We FALL ASleep At Night, We Do REST Right

    We Do Sleep At Night, We Do REST Right 前言 REST 起源 REST 约束 客户端 - 服务端 无状态 缓存 统一接口 分层系统 按需代码 统一接口约束 资源识 ...

  7. C#使用iTextSharp+ZXing.Net+FreeSpire.PDF生成和打印pdf文档

    项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.Net+FreeSpire.PDF三个类库实现了生成pdf.生成条形码和打印pdf功能. 首先在项 ...

  8. 浅谈数通畅联ECP与EAC的区别

    最近收到很多客户的提问,AEAI ECP企业云联平台是什么产品?为什么AEAI ECP中包括集成套件?EAC也是数通畅联的产品吗?同样涉及集成两者有什么区别呢?诸如此类的问题还有很多. 其实AEAI ...

  9. 12:集合map、工具类

    一.map集合 Map:一次添加一对元素.Collection 一次添加一个元素. Map也称为双列集合,Collection集合称为单列集合. 其实map集合中存储的就是键值对(结婚证书), map ...

  10. 基于vue的颜色选择器vue-color-picker

    项目中有用到颜色选择器的童鞋们可以看过来了 关于color-picker的jquery的插件是有蛮多,不过vue组件没有吧,反正我没有找到, 虽然element-ui里面有这个,但是你愿意为了一个小功 ...