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
批量导入数据
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')
对数据库的批量数据进行展示:
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>
运行结果:
数据过多在一个页面展
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})
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
小问题,当页码不再范围内处理
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())

引入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">«</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">»</span> </a> </li> </ul> </nav>