博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django学习(五)优雅地分页展示网页
阅读量:6343 次
发布时间:2019-06-22

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

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

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

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

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

         其模板的代码如下:

    {% for contact in contacts %}
  • {
    {contact}}
  • {% endfor %}
{% if contacts.has_previous %}
上一页 {% endif %}
{% for p in contacts.paginator.page_range %} {% ifequal p contacts.number %} {
{p}}
{% else %} {% endifequal %} {% endfor %}
{% if contacts.has_next %}
下一页 > {% endif %}
[page:{
{ contacts.number }}/{
{ contacts.paginator.num_pages }}]
该网页中的数字按钮可连接到对应的页码,当然也可以用‘下一页’链接。也可以自由选择每页需要显示的条目数量,如下:

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

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

    {% for contact in contacts %}
  • {
    {contact}}
  • {% endfor %}
{% if contacts.has_previous %}
上一页 {% endif %}
{% for p in contacts.paginator.page_range %} {% ifequal p contacts.number %} {
{p}}
{% else %} {% endifequal %} {% endfor %}
{% if contacts.has_next %}
下一页 > {% endif %}
[page:{
{ contacts.number }}/{
{ contacts.paginator.num_pages }}]
           最后,我们的后端views.py代码如下:

from django.http import HttpResponsefrom django.shortcuts import render_to_responsefrom django.utils.datastructures import MultiValueDictKeyErrorfrom 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 choicedef 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中网页分页展示的功能,而且能够自己选择每一页需要展示的条目的数量,这显然是非常方便使用的。

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

你可能感兴趣的文章
linux笔记:shell基础和bash的基本功能
查看>>
sessionStorage 、localStorage 和 cookie
查看>>
工厂方法
查看>>
Android showing LoadingView or EmptyView for Activity or Fragment
查看>>
Android 开机自动运行和添加删除桌面快捷方式
查看>>
[Android Pro] Android打包一个Apk后,如何查看它的VersionCode、VersionName 等等。
查看>>
Cause: com.ibatis.common.xml.NodeletException: Error parsing XML.
查看>>
中法两国还将在中非、东非携手加强基础设施建设、安全、金融、能源、维和护航、医药卫生和教育培训等领域全面展开合作...
查看>>
oracle查找树型结构数据
查看>>
第36-37 Tomcat & SVN
查看>>
百度编辑器ueditor异步载入的操作方法
查看>>
POJ1328 Radar Installation 【贪心·区间选点】
查看>>
使用GNU Autotools制作Makefile
查看>>
css基础选择器
查看>>
Spring+SpringMVC+MyBatis深入学习及搭建(三)——MyBatis全局配置文件解析
查看>>
连接mysql报错Access denied for user 'root'@'localhost' (using password: YES)解决办法
查看>>
js点击下载图片
查看>>
Ubuntu Linux系统的分区方案【转】
查看>>
数据库中的数据类型
查看>>
MVC3教程中无法引用system.data.entity.database的解决办法
查看>>