观看记录
  • 我的观影记录
登录
测试首页django 分页器(paginator)

django 分页器(paginator)

如何利用django自带的分页器(Paginator),本篇文章本家儿要环绕分页器,具体论述实现分页器功能。

这里我利用的是py3和django2.0版本!

工具/原料

  • python3
  • django2.0.3

Models模子点窜

  1. 1

    from django.db import models

    class Blog(models.Model):

        title = models.CharField(max_length=50) # 题目 限制50字

        content = models.TextField() # 文章内容

        def __str__(self):

            return self.title

        class Meta: # 自界说排序

            ordering = ['-id']

  2. 2

    这里我在blog这个app下的models.py里面界说了一个BlogCharField字符串字段,用于较短的字符串,利用它时必需增添限制max_lengthTextField字符串字段,可以保留年夜量文本。

  3. 3

    模子点窜完跋文得先利用python manage.py makemigrations,然后再用

    python manage.py migrate

Views视图点窜

  1. 1

    def home(request):

        context = {}

        context['blogs'] = Blog.objects.all() # 获取全数文章

        return render(request,"home.html", context)

url路由点窜

  1. 1

    from django.contrib import admin

    from django.urls import path

    from blog import views

    #127.0.0.1:8000

    urlpatterns = [

        path('admin/', admin.site.urls),

        path('',views.home, name='home'),

    ]

  2. 2

    django网页的默认打开网址是127.0.0.1:8000,当我们打开网址时,响应的就会由第二条path去执行,然后由views视图去响应这个请求

利用shell快速生当作年夜量数据

  1. 1

    若是我们手动在后台建立一个个文章,显然是很慢的,是以我们可以利用shell来为我们快速生当作文章数据。首先在cmd号令模式下输入python manage.py shell,接着输入以下代码就能建立出31篇文章了!

  2. 2

    from blog.models import Blog

    for x in range(1,32):

        blog = Blog()

        blog.title ="第%s篇文章" %(x)

        blog.content ="第%s篇内容" %(x)

        blog.save()

    Blog.objects.all() # 看看是否生当作了文章

添加模板

  1. 1

    APP目次下建立templates文件夹,并在该文件夹里建立一个home.html文件,接着添加内容

  2. 2

    <!DOCTYPE html>

    <html>

    <head>

        <meta charset="UTF-8">

        <title>Hello</title>

    </head>

    <body>

        {% for blog in blogs %}

            <p>{{ blog.title }}</p>

            <p>{{ blog.content }}</p>

            <hr>

        {% endfor%}

    </body>

    </html>

  3. 3

    接着python manage.py runserver之后打开网址127.0.0.1:8000,你会看到页面呈现31篇文章,若是文章篇数过多,会导致网页加载迟缓甚至卡死,并且十分不美不雅,是以我们就想到利用分页器来解决这个问题。    

利用django自带的paginator分页器

  1. 1

    views.py添加代码

  2. 2

    from django.shortcuts import render

    from blog.models import Blog

    from django.core.paginator import Paginator

    def home(request):

        context = {}

        blogs = Blog.objects.all()

        paginator = Paginator(blogs, 5) # 每5份内容分页一次

        page_num = request.GET.get('page',1) # 获取url参数,127.0.0.1:8000/?page=<value>

        # 不法数值则返回1 数值为空也返回1 如 127.0.0.1:8000/?page=asdsa

        page_blogs = paginator.get_page(page_num) #获取当前(页码)所需要的文章列表 半斤八两于一个容器

        context['blogs'] = page_blogs

        return render(request,"home.html", context)

  3. 3

    这里我们利用了django的Paginator,

    用法:Paginator(数据列表,每页中含几多数据)

    之后,我们再次打开网页127.0.0.1:8000,会发现页面只显示了10篇文章!我们在网址上输入http://127.0.0.1:8000/?page=2,当作功了!

再次点窜views视图

  1. 1

    这里为了结果加倍较着,我点窜了paginator = Paginator(blogs, 2),每一页中只含两篇文章!

  2. 2

    from django.shortcuts import render

    from blog.models import Blog

    from django.core.paginator import Paginator

    def home(request):

        context = {}

        blogs = Blog.objects.all()

        paginator = Paginator(blogs, 2) # 每2份内容分页一次

        page_num = request.GET.get('page',1) # 获取url参数,127.0.0.1:8000/?page=<value>

        # 不法数值则返回1 数值为空也返回1 如 127.0.0.1:8000/?page=asdsa

        page_blogs = paginator.get_page(page_num) #获取当前(页码)所需要的文章列表 半斤八两于一个容器

        page_list = [x for x in range(page_blogs.number -2, page_blogs.number + 3 )if x in paginator.page_range]

        print(page_list)

        # 添加省略号

        if page_list[0] -1 >= 2: # 判定当前第一个元素减1是否年夜于2 

            page_list.insert(0,"...") # 则插入该数构成为第一个元素 ...

        if paginator.num_pages - page_list[-1] >= 2: # 判定最年夜页码数-最后一个元素相减是否年夜于2

            page_list.append("...") # 则添加一个元素

        print(page_list)

        #添加首从头至尾页

        if page_list[0] =="...":

            page_list.insert(0, 1) # 则插入该数构成为第一个元素(首页)

        if page_list[-1] != paginator.num_pages: # 判定是否不等于最年夜页码

            page_list.append(paginator.num_pages) # 不等于则插入到最后一个元素(从头至尾页)

        print(page_list)

        context['blogs'] = page_blogs

        context['page_list'] = page_list

        return render(request,"home.html", context)

    # paginator.num_pages 总共有几多页码

    # paginator.page_range 页码规模 如 (1,7)

    # page_list 页码列表规模

  3. 3

    这里的

    page_list = [x for x in range(page_of_blogs.number -2, page_of_blogs.number + 3 )if x in paginator.page_range]

    我利用了列表生当作式,如许可以避免超出页码规模或呈现页码数为负数的环境,别的我把page_list页码列表规模传出去,如许就可以在模板中利用了!别的添加了首从头至尾页以及省略号!之后就是在模板中利用了!

点窜模板home.html

  1. 1

    这里我利用的是bootstrap的分页组件!在head头部记得引入css!

    <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">

  2. 2

    <!DOCTYPE html>

    <html>

    <head>

        <meta charset="UTF-8">

        <title>Hello</title>

        <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">

    </head>

    <body>

        <div>

            {% for blog in blogs %}

                <p>{{ blog.title }}</p>

                <p>{{ blog.content }}</p>

                <hr>

            {% endfor%}

        </div>

        <div>

            <ul>

                <li>

                    {% if blog_list.has_previous %}{# 是否上一页 #}

                        <a href="?page={{ blog_list }}" aria-label="Previous">

                            <span aria-hidden="true">&laquo;</span>

                        </a>

                    {% else %}

                        <span aria-hidden="true">&laquo;</span>

                    {% endif%}

                </li>

                {# 全数页码 #}

                {% for page_list in page_list %}

                    {% if page_list == blogs.number %}{# 判定是否当前页 是则高亮 #}

                        <li><span>{{ page_list }}</span></li>

                    {% else %}

                        {% if page_list == '...' %}

                            <li><span>{{ page_list }}</span></li>

                        {% else %}

                            <li><a href="?page={{ page_list }}">{{ page_list }}</a></li>

                        {% endif %}

                    {% endif %}

                {% endfor %}

                <li>

                    {% if page_list.has_next %}

                        <a href="#" aria-label="Next">

                            <span aria-hidden="true">&raquo;</span>

                        </a>

                    {% else %}

                        <span aria-hidden="true">&raquo;</span>

                    {% endif %}

                </li>

            </ul>

    </div>

    </body>

    </html>

  3. 3

    context['blogs'] = page_blogs

    context['page_list'] = page_list

    page_list.has_previous 是否有上一页

    page_list.has_next 是否有下一页

    blogs.number 当前页码数 半斤八两于-> page_blogs.number 

  4. 4

    这里我利用了django的模板,for轮回,前提if,一般都用{% 前提 %},变量则利用{{ 变量名 }},

  5. 5

    若是想要让分页器在网页上居中,可以在div标签上添加:

    <div align="center"></div>即可实现居中结果

    最终结果:

注重事项

  • 注重要在setting.py里在INSTALLED_APPS添加你的APP进去!
  • 若是是第一次建立项目,先利用python manage.py migrate进行迁徙

“django 分页器(paginator)”关联的文章

  • 如何关闭皮皮搞笑精彩内容消息通知

    皮皮搞笑是一款手机搞笑社区App,让用户笑到没心没肺,又忍不住感动流泪的温暖家园,那么如何关闭皮皮搞笑精彩内容消息通知以满足不同用户的需求呢?

    1小时前0阅读

    如何关闭皮皮搞笑精彩内容消息通知
  • win7系统找不到宽带连接怎么办

    现如今很多用户都喜欢使用win7系统,而在使用win7系统的过程中做的最多的就是上网了。Win7系统上网离不开宽带连接,如果win7宽带连接找不到了,应该怎么办呢?下面就让小编为大家带来win7系统找不到宽带连接解决方法

    1小时前0阅读

    win7系统找不到宽带连接怎么办
  • 新版QQ音乐怎么关闭底部的直播导航

    新版QQ音乐怎么关闭底部的直播导航?下面请大家随小编一起来看看操作的方法吧。

    1小时前0阅读

    新版QQ音乐怎么关闭底部的直播导航
  • 怎样查询高速实时路况?

    要出行怎么查询高速实时路况?我们用地图就可以了,在地图上就可以看到实际的路况的,下面详细来看下。

    1小时前0阅读

  • 六芒星手势密码教程
  • 教师讲课过程评价标准

    教师是太阳底下最光辉的职业,但是成为教师之路也是要经历重重考验的,下面给大家说说教师讲课过程评价标准

    1小时前0阅读

  • 酚醛铝箔夹芯板

    酚醛铝箔夹芯板是由酚醛泡沫与两层亚光铝箔经过特殊工艺复合而成。外膜材料为经过高温固化的高分子膜,可有效的防止紫外线及气体腐蚀,并与铝箔结合牢固,又能与酚醛泡沫形成聚合物,从而保证象圆酚醛铝箔夹芯板的质量稳定。

    1小时前0阅读

  • Xperia XZ2 Premium配置如何

    Xperia XZ2 Premium是索尼在4月16日悄悄发布的新机,而且没进行预热,下面来简单了解一下配置。

    1小时前0阅读

  • PLSQL破解,无需注册码和破解工具

    PL/SQL Developer过期了,又没有注册码,又不想花钱买,而且事情又非常急,这时候怎么办?不要着急,请随小编一起解决这种情况吧。

    1小时前0阅读

  • Win11按capslock切换不了大小写怎么解决

    有朋友不知道在哪里设置,下面小编就给大家分享详细的设置方法,有需要帮助的朋友可以参考下这篇经验,希望能对大家有所帮助。

    2小时前0阅读

    Win11按capslock切换不了大小写怎么解决
切换深色外观
留言
视频编辑修改
回到顶部
首页
手机数码
医疗健康
金融管理
社交情感
无名