批量插入
原理:
1. 先批量创建数据
2. 再将所有的数据展示到前端
方法一:每循环一次,创建一个数据
def index(request):
# 先批量生成1000条数据
for i in range(1000):
models.DAY09.objects.create(title='No.%sBOOK'%i)
# 再将所有数据查询并展示到前端页面
book_queryset = models.DAY09.objects.all()
return render(request, 'index.html', locals())
方法二:循环创建数据,添加进表格,用.bulk方法直接在表里创建数据
def index(request):
book_list = []
for i in range(100000):
book_obj = models.DAY09(title='No.%sBOOK'%i)
book_list.append(book_obj)
model.DAY09.objects.bulk_create(book_list)
book_queryset = models.DAY09.objects.all()
return render(request, 'index.html', locals())
注意:.bulk_create()是封装好的方法,效率非常快。推荐!
分页器
接着上面已经批量创建好的数据,我们先删除PK值大于1000的,这样方便我们操作
models.DAY09.objects.filter(pk__gt=1000).delete()
推导分页原理
规律
'''
page_per_num = 10
current_page | start_page | end_page
1 0 10
2 10 20
3 20 30
4 30 40
page_per_num = 5
current_page | start_page | end_page
1 0 5
2 5 10
3 10 15
4 15 20
(current_page - 1) * page_per_num = start_page
current_page * page_per_num = end_page
'''
代码原理:
def index(request):
# 分页
book_queryset = models.DAY09.objects.all()
# 想访问哪一页数据
current_page = request.GET.get('page', 1) # 如果获取不到当前页码,默认展示第一页
# 数据类型转换
try:
current_page = int(current_page)
except Exception:
current_page = 1
# 每页展示多少条数据
page_per_num = 10
# 起始位置
start_page = (current_page - 1) * page_per_num
# 终止位置
end_page = current_page * page_per_num
# 分页
book_queryset = models.DAY09.objects.all()[start_page : end_page]
return render(request, 'index.html', locals())
变成自动化分页,加渲染界面,动态
再页码制作个数时候,一般情况下都是奇数,符合中国人审美上的对称
def index(request):
# 分页
book_list = models.DAY09.objects.all()
# 想访问哪一页数据
current_page = request.GET.get('page', 1) # 如果获取不到当前页码,默认展示第一页
# 数据类型转换
try:
current_page = int(current_page)
except Exception:
current_page = 1
# 每页展示多少条数据
page_per_num = 10
# 起始位置
start_page = (current_page - 1) * page_per_num
# 终止位置
end_page = current_page * page_per_num
# 计算出到底需要多少页
all_count = book_list.count()
page_count, more = divmod(all_count, page_per_num)
if more:
page_count += 1
page_html = ''
xxx = current_page
if current_page < 6:
current_page = 6
for i in range(current_page - 5, current_page + 6):
if xxx == i:
page_html += '<li class="active"><a href="?page=%s">%s</a></li>'%(i,i)
else:
page_html += '<li><a href="?page=%s">%s</a></li>' % (i, i)
# 分页
book_queryset = book_list[start_page : end_page]
return render(request, 'index.html', locals())
views.py
<body>
{% for foo in book_queryset %}
<p>{{ foo.title }}</p>
{% endfor %}
<nav aria-label="Page navigation">
<ul class="pagination">
<li>
<a href="#" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
{{ page_html|safe }}
<li>
<a href="#" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav>
</body>