设为首页 加入收藏

TOP

django框架(部分讲解)(二)
2023-07-25 21:29:02 】 浏览:103
Tags:django 框架
return render(request, 'booklist.html', locals()) '''这个时候快速的批量创建一下就好了 使用普通的create创建还需要等待'''

image

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">&laquo;</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">&raquo;</span>
                        </a>
                    </li>
                </ul>
            </nav>
            
		'''现在有点像模像样了 但是还是有一个问题就是当前只能获取这五页后面的跳转不过去 我们也不知道总共有多少页'''

image

			所以我们要计算出来总共有多少页 但是也不能把前端页码行数写死了 需要通过循环来实现
			
		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 但是后端支
首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇如何创建Django项目 下一篇pandas数据清洗

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目