python分页技术

pythn分页技术:

一、利用算法来进行分页

from django.contrib import admin
from django.urls import path

from app01 import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', views.index),
   


]
from django.shortcuts import render,HttpResponse
import json

# Create your views here.
user_list=[]
for i in range(1,999):
    user={'name':'root'+str(i),'age':i}
    user_list.append(user)

def index(request):
    per_page_count = 10
    current_page=request.GET.get('p')
    current_page=int(current_page)

    start_page=(current_page-1)*per_page_count
    end_page=current_page*per_page_count
    data=user_list[start_page:end_page]
    prve_page=current_page-1
    if prve_page<=1:
        prve_page=1
    next_page=current_page+1
    if next_page>=999%10:
        next_page=100
    return render(request,'index.html',{'user_list':data,'prve_page':prve_page,'next_page':next_page})
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<ul>
    {% for row in user_list %}
        <li>{{ row.name }}----{{ row.age }}</li>
    {% endfor %}
    <a href="/index?p={{ prve_page }}">上一页</a>
    <a href="/index?p={{ next_page }}">下一页</a>
</ul>

</body>
</html>

完成后效果如下:

2利用pyhon自带的Paginator

from django.contrib import admin
from django.urls import path

from app01 import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('show',views.show)


]
from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger

def show(request):
    #per_page:每页显示数量
    #count:数据总个数
    #num_page:总页数
    #page_range:总页数的范围:(1,10),(1,100)...
    #page:page对象(是否有上一页和下一页)
    current_page=request.GET.get('p')
    paginator=Paginator(user_list,10)
    try:
        pota=paginator.page(current_page)
    except PageNotAnInteger:
        pota=paginator.page(1)
    except EmptyPage:
        pota=paginator.page(paginator.num_pages)
    return render(request,'show.html',{'pota':pota})
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<ul>
    {% for foo in pota.object_list %}
        <li>{{ foo.name}}--{{ foo.age }}</li>
    {% endfor %}
    {% if pota.has_previous %}
        <a href="/show?p={{pota.previous_page_number}}"><<上一页</a>
    {% endif %}
    {% if pota.has_next %}
        <a href="/show?p={{pota.next_page_number}}">下一页>></a>
    {% endif %}

</ul>
</body>
</html>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值