return render(request, 'booklist.html', locals())
'''这个时候快速的批量创建一下就好了 使用普通的create创建还需要等待'''
Django批量数据展示
到此目前我们的数据都在一页 鼠标滑动都要很久 我们正常应该是给这个数据分页 一个多少条数据 所以我们进行分页
book_query = models.Books.objects.all()[0:10]
''' all返回的是QuerySet 可以看成列表套对象 也就是说支持索引取值 现在的问题总不可能让客户用源码修改页数吧?'''
current_page = request.GET.get('page', 1) # 获取用户指定的page 如果没有则默认展示第一页
try:
current_page = int(current_page) # 因为返回给前端的是字符串要转换成整形
except ValueError:
current_page = 1
per_page_num = 10 # 自定义每一页展示的数据条数
start_num = (current_page - 1) * per_page_num # 定义出切片的起始位置
end_num = current_page * per_page_num # 定义出切片的终止位置
book_query = models.Books.objects.all()[start_num:end_num]
# http://127.0.0.1:8000/booklist/?page=4
'''现在可以通过地址栏输入对应的页码就可以进入对于的页面 但是总不能让用户一直输入页数吧 体验极差 正常网站都有页码点击跳转'''
{% for book_obj in book_query %}
<p class="text-center">{{ book_obj.name }}</p>
{% endfor %}
<nav aria-label="Page navigation" class="text-center">
<ul class="pagination">
<li>
<a href="#" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
<li class="active"><a href="?page=1">1</a></li>
<li><a href="?page=2">2</a></li>
<li><a href="?page=3">3</a></li>
<li><a href="?page=4">4</a></li>
<li><a href="?page=5">5</a></li>
<li>
<a href="#" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav>
'''现在有点像模像样了 但是还是有一个问题就是当前只能获取这五页后面的跳转不过去 我们也不知道总共有多少页'''
所以我们要计算出来总共有多少页 但是也不能把前端页码行数写死了 需要通过循环来实现
def home(request):
book_data = models.Books.objects.all() # 获取所有的数据
all_count = book_data.count() # 通过计数获取有多少条数据
per_page_num = 10 # 自定义每一页展示的数据条数 这个时候就可以动态计算了
all_page_num, more = divmod(all_count, per_page_num) # divmod计算需要多少页来展示
if more:
all_page_num += 1 # 这样就获取到了所有页码的数量
current_page = request.GET.get('page', 1) # 获取用户指定的page 如果没有则默认展示第一页
try:
current_page = int(current_page) # 因为返回给前端的是字符串要转换成整形
except ValueError:
current_page = 1
html_page = ''
xxx = current_page
if current_page < 6: # 一用户访问的页码小于6就等6
xxx = 6
for i in range(xxx-5, xxx+6):
if current_page == i:
html_page += '<li class="active"><a href="?page=%s">%s</a></li>' % (i, i)
else:
html_page += '<li><a href="?page=%s">%s</a></li>' % (i, i)
start_num = (current_page - 1) * per_page_num # 定义出切片的起始位置
end_num = current_page * per_page_num # 定义出切片的终止位置
book_query = models.Books.objects.all()[start_num:end_num]
''' all返回的是QuerySet 可以看成列表套对象 也就是说支持索引取值
现在的问题总不可能让客户用源码修改页数吧?
'''
return render(request, 'booklist.html', locals())
这个时候我们的分页器就差不多完美了下面是整体思路解析!!!
'''
当数据量比较大的时候 页面展示应该考虑分页
1.QuerySet切片操作
2.分页样式添加
3.页码展示
如何根据总数据和每页展示的数据得出总页码
divmod()
4.如何渲染出所有的页码标签
前端模板语法不支持range 但是后端支