1 、批量数据导入

建立Django项目:pageDemo

modles

from django.db import models

class Book(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=8, decimal_places=2)

数据库迁移

python manage.py makemigrations
python manage.py migrate

Django - 分页器

批量导入数据

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_obj = Book(title="book_%s" % i, price=i * i) book_list.append(book_obj) Book.objects.bulk_create(book_list) # 批量导入 return render(request,'index.html')
Django - 分页器

 对数据库的批量数据进行展示:

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_obj = Book(title="book_%s" % i, price=i * i)
        book_list.append(book_obj)

    Book.objects.bulk_create(book_list)  # 批量导入
    '''
    book_list=Book.objects.all()
    return render(request,'index.html',{'book_list':book_list})

index.html

<body>
    <ul>
        {% for book in book_list %}
        <li>
            {{ book.title }}:{{ book.price }}
        </li>
        {% endfor %}
    </ul>
</body>
运行结果:
Django - 分页器

 数据过多在一个页面展

 

2、分页器的使用

2.1、静态显示页码

#导入分页器

from django.core.paginator import Paginator
def index(request):
    book_list=Book.objects.all()
    # 分页器  1.对谁做分页, 每页几条数据
    paginator=Paginator(book_list,10)

print("count:", paginator.count) # 数据总数 print("num_pages", paginator.num_pages) # 总页数 print("page_range", paginator.page_range) # 页码的列表# 显示某一页的具体方式:
page1=paginator.page(1) # 方式一 print('page1.object_list',page1.object_list)
# 方式二 for i in page1: print(i) return render(request,'index.html',{'book_list':book_list})

Django - 分页器

 2.2 动态获取当前页码

 views.py

from django.core.paginator import Paginator,EmptyPage
def index(request):
    book_list=Book.objects.all()
    # 分页器  1.对谁做分页, 每页几条数据
    paginator=Paginator(book_list,10)
    print("count:", paginator.count)  # 数据总数
    print("num_pages", paginator.num_pages)  # 总页数
    print("page_range", paginator.page_range)  # 页码的列表
 
    # 方式2:动态获取当前页码num

    print(request.GET)  # http://127.0.0.1:8000/app01/index/?page=1
    current_page_num = int(request.GET.get("page"))  # 1   <QueryDict: {'page': ['2']}>
    current_page = paginator.page(current_page_num) # 当前num页码的page对象
    return render(request, 'index.html', locals())
    

index.html

      <ul>
        {% for book in current_page %}
        <li>
            {{ book.title }}:{{ book.price }}
        </li>
        {% endfor %}
    </ul>

运行结果:手动输入分页页码:page=1;page=2

Django - 分页器Django - 分页器

小问题,当页码不再范围内处理

    try:
        print(request.GET)  # http://127.0.0.1:8000/app01/index/?page=1
        current_page_num = int(request.GET.get("page"))  # 1   <QueryDict: {'page': ['2']}>
        current_page = paginator.page(current_page_num) # 当前num页码的page对象
    except EmptyPage as e:
        current_page = paginator.page(1)# 认为设定,不再范围内显示第一页内容
    return render(request, 'index.html', locals())
Django - 分页器

 引入Bootstrap

 css样式引入:

<!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

分页引入:

默认分页

受 Rdio 的启发,我们提供了这个简单的分页组件,用在应用或搜索结果中超级棒。组件中的每个部分都很大,优点是容易点击、易缩放、点击区域大。

<nav aria-label="Page navigation">
  <ul class="pagination">
    <li>
      <a href="#" aria-label="Previous">
        <span aria-hidden="true">&laquo;</span>
      </a>
    </li>
    <li><a href="#">1</a></li>
    <li><a href="#">2</a></li>
    <li><a href="#">3</a></li>
    <li><a href="#">4</a></li>
    <li><a href="#">5</a></li>
    <li>
      <a href="#" aria-label="Next">
        <span aria-hidden="true">&raquo;</span>
      </a>
    </li>
  </ul>
</nav>
分页模板

相关文章: