django分页分析

本文详细探讨了Django框架中的分页功能,从如何使用内置的分页器到自定义分页逻辑,深入分析了分页在大型Web应用中的重要性,以及在实际项目中如何优化分页性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

	1. 将movie.sql 导入 当前数据库中。
	2. 创建新应用 movieapp   python manage.py startapp  movieapp
	3. 将新应用注册到INSTALLED_APPS中
		INSTALLED_APPS = [
			...
			'stuapp',
			'movieapp'
		]
	
	4.将数据库表逆向生成模型类
		python manage.py inspectdb>movieapp/models.py

	
	5.显示影片页面
		GET  movies/
		
		配置路由
		
		
		创建视图函数
		
	6.分页
	  MySQL分页语句: select * from t_movie limit 0,10;
	  
	  a[start:end]
	  
	  设定:
	     num:当前页码数     size:每页显示记录数   start    end 
		  1                   2                     0       2
		  2                   2                     2       4
		  3                   2                     4       6
		  n                   s                   (n-1)*s   n*s
		  
2.Django分页
	1.访问路径:http://127.0.0.1:8000/movies/page/
	2.配置路由
	3.创建视图函数
		def pageMovieView(request):
			"""利用Django分页实现影片展示"""

			#0.获取当前页码数
			num = request.GET.get('num',1)
			num = int(num)

			#1.获取所有的影片信息
			tmovies = TMovie.objects.all().order_by('id')

			#2.创建django分页对象
			page_obj = Paginator(object_list=tmovies,per_page=12)
			# Paginator(tmovies,12)

			#3.获取当前页的数据
			try:
				per_page_list = page_obj.page(num)
			except EmptyPage:
				per_page_list = page_obj.page(1)
			

			return render(request,'movie.html',{'movies':per_page_list})
			
	4.修改movie.html页面信息
		<p>
            {% if movies.has_previous %}
                <a href="/movies/page/?num={{ movies.previous_page_number }}">上一页</a>
            {% endif %}

            {% if movies.has_next %}
            &emsp;<a href="/movies/page/?num={{ movies.next_page_number }}">下一页</a>
            {% endif %}

            &emsp;</p>
			
	5.增加每页页码显示的功能
	
		思路:
			每页显示10个页码
			当前页码数显示在中间位置(前5后4)
			获取每页显示的起始页码数 start
			获取每页显示的结束页码数  end
			
			start  		end          num 
			  1			10           1
			  1     	10            5
			  1     	10            6
			  2     	11            7
			  3     	12            8
			 n-(10/2)  start+9        n
			 
			page_num_list =  [start,end]  =  range(start,end+1)
			
			
			for page in page_num_list:
			
			
		核心代码:
		#4.获取每页页码数的列表
			#start:每页起始页码数
			#end:每页结束页码数
			start = num - math.ceil(10/2)

			if start < 1:
				start = 1

			end = start + 9

			if end > page_obj.num_pages:
				end = page_obj.num_pages

			if end < 10:
				start = 1
			else:
				start = end - 9
			#获取每页显示页码数列表
			page_num_list = range(start,end+1)
			
			
			
		Django分页涉及方法:
			#创建分页器对象
			page_obj = Paginator(object_list=tmovies,per_page=12)	
			
			#Paginator的方法
			
				per_page_obj = page_obj.page(num)  --->  获取当前页的数据
				page_obj.num_pages   --->获取总页数
			
			#Page 对象的方法
				#返回是否有上一页(True/False)
				per_page_obj.has_previous()
				
				#返回是否有下一页(True/False)
				per_page_obj.has_next()
				
				#返回上一页的页码数
				per_page_obj.previous_page_number()
				
				#返回下一页的页码数
				per_page_obj.next_page_number()
				
				#获取当前页码数
				per_page_obj.number()
				
			#异常对象
				EmptyPage
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值