django 的分页器Paginator ,从django中导入类

Posted 谷永辉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django 的分页器Paginator ,从django中导入类相关的知识,希望对你有一定的参考价值。

先创建表,然后生成批量数据。

在models文件里

from django.db import models

# Create your models here.


class Book(models.Model):

    name = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=5,decimal_places=2)

然后执行python manage.py makemigrations   ,python migrate 生成数据库。把数据库从左边拉到右边,

在url里创建showBooks视图函数API,


from django.conf.urls import url
from django.contrib import admin

from app01 import views
urlpatterns = [
    url(r\'^admin/\', admin.site.urls),
    url(r\'^index/\', views.index),
    url(r\'^ajaxHandle/\', views.ajaxHandle),
    url(r\'^showBooks/\', views.showBooks),-------

在views文件中创建showBooks 函数,批量导入数据,用bulk_create()

从django中导入Paginstor类,用对象调用方法,

 1 def showBooks(requests):
 2 
 3     #批量导入数据bulk_create()方法
 4 
 5     # book_list=[]#里面存一个个对象
 6     # for i in range(100):
 7     #     book_list.append(Book(name="book%s"%i,price=2+i+2))
 8     #
 9     # Book.objects.bulk_create(book_list)
10 
11     book_list_all = Book.objects.all()
12 
13     #分页器Paginator,是导入了一个类,在用实列出来的对象调用方法,
14     from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger
15 
16     #book_list_all 是要被分页的对象,第二个参数,是每页显示的条数
17     p = Paginator(book_list_all,20)# p就是每页的对象,
18     p.count  #数据总数
19     p.num_pages  #总页数
20     p.page_range#[1,2,3,4,5],得到页码,动态生成,
21 
22     page_num = requests.GET.get("page")#以get的方法从url地址中获取
23     #如果输错了页码,
24     try:
25         book_list = p.page(page_num)#括号里的是页数,显示指定页码的数据,动态显示数据,所以不能写死了
26 
27     except PageNotAnInteger:#如果输入页码错误,就显示第一页
28         book_list = p.page(1)
29     except EmptyPage:#如果超过了页码范围,就把最后的页码显示出来,
30         book_list = p.page(p.num_pages)
31 
32     return render(requests,"showBooks.html",locals())

 

 

数据库生成数据

 

在templates 创建showBooks页面,把数据库数据渲染出来

 

{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static \'bootstrap/css/bootstrap.css\' %}">


</head>
<body>

<ul>
{#request 也可以在这里渲染出来#}
    {% for book in book_list %}
        <li>{{ book.id }}&nbsp&nbsp&nbsp&nbsp&nbsp{{ book.name }}&nbsp&nbsp&nbsp&nbsp&nbsp{{ book.price }}</li>
    {% endfor %}


</ul>


      <ul class="pagination">
          {% if book_list.has_previous %}
        <li><a href="/showBooks/?page={{ book_list.previous_page_number }}">上一页</a></li>  ---直接使用方法,上一页,
        {% else %}
        <li class="disabled"><a href="#">上一页</a></li>
          {% endif %}

      {% for num in p.page_range %}
        <li><a href="/showBooks/?page={{ num }}">{{ num }}</a></li>
      {% endfor %}

        {% if book_list.has_next %}
        <li><a href="/showBooks/?page={{ book_list.next_page_number }}">下一页</a></li>
      {% else %}
        <li class="disabled"><a href="#">下一页</a></li>
        {% endif %}

      </ul>


</body>

</html>

 

以上是关于django 的分页器Paginator ,从django中导入类的主要内容,如果未能解决你的问题,请参考以下文章

分页器组件

Django 第八篇Django自带的分页器

Django -- 11.组件_分页器

django之分页器

Django---分页器中间件

python测试开发django-115.Paginator分页器展示table表格数据