牌九网站

牌九网站是大型的国际娱乐游戏的NO.1,足球篮球投注等多款游戏,官方稳定返现高,最高返现888,玩家可以在网页上登录注册,官网还提供app下载。django 分页器(paginator)_www.iiiff.com

若何利用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进行迁徙
  • 发表于 2018-08-21 00:00
  • 阅读 ( 529 )
  • 分类:其他类型

0 条评论

请先 登录 后评论
admin
admin

0 篇文章

作家榜 »

  1. xiaonan123 189 文章
  2. 汤依妹儿 97 文章
  3. luogf229 46 文章
  4. jy02406749 45 文章
  5. 小凡 34 文章
  6. Daisy萌 32 文章
  7. 我的QQ3117863681 24 文章
  8. 华志健 23 文章

推荐文章

联系我们:uytrv@hotmail.com 问答工具