Django技术开发第六式--数据进行分页

1、创建数据库

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

models.py

#coding:utf-8
from django.db import models

# Create your models here.

class Book(models.Model):
    #书名
    title = models.CharField(max_length=32)
    #价格 max_digits=9,decimal_places=2:
    price = models.DecimalField(max_digits=9,decimal_places=2)

    def __str__(self):
        return self.title

urls.py

from django.contrib import admin
from django.urls import path
from app01 import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path("index/",views.index),
]

views.py

#coding:utf-8
from django.shortcuts import render

# Create your views here.

from app01.models import Book
from django.core.paginator import Paginator,EmptyPage

def index(request):
    """批量插入数据"""
    for i in range(100):
        Book.objects.create(title="book_%s"%i,price=i*i)
    return render(request,"index.html")

将db.sqlite3数据拽入到数据库中

 得到数据库如下所示:

 将Django项目进行运行,运行以下代码进行数据随机生成

views.py

扫描二维码关注公众号,回复: 10920836 查看本文章
#coding:utf-8
from django.shortcuts import render

# Create your views here.

from app01.models import Book
from django.core.paginator import Paginator,EmptyPage

def index(request):
    """批量插入数据"""
    #此方法速度太慢
    # for i in range(100):
    #     Book.objects.create(title="book_%s"%i,price=i*i)

    book_list = []
    for i in range(100):
        book = Book(title="book_%s"%i,price=i*i)
        book_list.append(book)

    Book.objects.bulk_create(book_list)#批量插入


    return render(request,"index.html")

运行结果:

 2、数据展示页面

views.py

#coding:utf-8
from django.shortcuts import render

# Create your views here.

from app01.models import Book
from django.core.paginator import Paginator,EmptyPage

def index(request):
    """批量插入数据"""
    # #此方法速度太慢
    # # for i in range(100):
    # #     Book.objects.create(title="book_%s"%i,price=i*i)
    #
    # book_list = []
    # for i in range(1,101):
    #     book = Book(title="book_%s"%i,price=i*i)
    #     book_list.append(book)
    #
    # Book.objects.bulk_create(book_list)#批量插入
    # return render(request,"index.html")

    #分页器的使用
    # print(paginator.count)  # 显示数据的总条数
    # print(paginator.num_pages)  # 显示数据被分成多少页
    # print(paginator.page_range)  # 显示页数的范围(1,11)包含1不包含11
    #
    # page = paginator.page(5)  # 获取第五页的数据
    # for i in page:
    #     print(i)
    #
    # print(page.has_next())  # 是否存在下一页
    # print(page.has_previous())  # 是否存在上一页
    #
    # print(page.next_page_number())
    # print(page.previous_page_number())

    """数据展示"""
    book_list = Book.objects.all()
    # 每页显示10页数据
    paginator = Paginator(book_list,10)
    try:

        current_page_num = request.GET.get("page",1)#获取页面page的值,如果获取不到则获取第一页的数据
        current_page = paginator.page(current_page_num)
    except EmptyPage as e:
        current_page_num = 1
        current_page = paginator.page(1)

    return render(request,"index.html",{"current_page":current_page,"paginator":paginator,"current_page_num":current_page_num})

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>数据页面</title>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

</head>
<body>

    <ul>
        {% for book in current_page %}
            <li>{{ book.title }}----{{book.price }}</li>
        {% endfor %}
        
    </ul>
    <nav aria-label="Page navigation">
        <ul class="pagination">
        {% if current_page.has_previous %}
           <li><a href="?page={{ current_page.previous_page_number }}"></a></li>
        {% else %}
           <li class="disabled"><a href="">上一页</a></li>
        {% endif %}

        {% for num in paginator.page_range %}
            {% if num == current_page_num %}
                <li class="active"><a href="?page={{ num }}">{{ num }}</a></li>
            {% else %}
                <li><a href="?page={{ num }}">{{ num }}</a></li>
            {% endif %}

        {% endfor %}


        <li>
            <a href="#" aria-label="Next">
            <span aria-hidden="true">下一页</span>
            </a>
        </li>
        </ul>
    </nav>
</body>
</html>

运行结果如下所示:

本期学习到此结束,欢迎大家关注交流。

发布了78 篇原创文章 · 获赞 5 · 访问量 8309

猜你喜欢

转载自blog.csdn.net/qq_36789311/article/details/100566687