django分页(原生分页)

来源:互联网 发布:数据库管理是什么 编辑:程序博客网 时间:2024/05/22 07:05

不使用django内置的分页进行分页   

提取到模块中后续可以直接调用


utils   pagination.py文件内容

class Page(object):    def __init__(self, current_page, all_count,base_url, per_page=10, pager_page_count=11):        '''        分页的初始化        :param current_page:当前页码         :param all_count: 数据库的总数据条数        :param per_page: 每页显示的数据条数         :param pager_page_count:页面上最多显示多少页码        '''        self.base_url=base_url        self.current_page = current_page        self.per_page = per_page        self.all_count = all_count        self.pager_page_count = pager_page_count        pager_count, b = divmod(all_count, per_page)        if b != 0:            pager_count += 1        # 总页码        self.pager_count = pager_count        #页码前后范围        half_pager = int(pager_page_count / 2)        self.half_pager = half_pager    @property    def start(self):        '''        :return:数据库获取值起始位置         '''        start = (self.current_page - 1) * self.per_page        return start    @property    def end(self):        '''        :return:数据库获取值结束位置         '''        end = self.current_page * self.per_page        return end    def page_html(self):        '''        :return:生成html页码        '''        # 如果总页码不足        if self.pager_count < self.pager_page_count:            page_start = 1            page_end = self.pager_count        else:  # 数据已经超过11条 判断当前页的大小            if self.current_page <= self.half_pager:                page_start = 1                page_end = 11            else:                # 如果当前页码+5大于总页码  结尾按总页码                if self.current_page + 5 > self.pager_count:                    page_end = self.pager_count                    page_start = self.pager_count - self.per_page                else:                    page_start = self.current_page - self.half_pager                    page_end = self.current_page + self.half_pager        page_list = []        if self.current_page == 1:            prev = '<a href="#">上一页</a>'        else:            prev = '<a   href="%s?page=%s">上一页</a>' % (self.base_url,self.current_page - 1)        page_list.append(prev)        # for i in range(1,pager_count+1):        for i in range(page_start, page_end + 1):            if self.current_page == i:                tp1 = '<a class="active" href="%s?page=%s">%s</a>' % (self.base_url,i, i,)            else:                tp1 = '<a href="%s?page=%s">%s</a>' % (self.base_url,i, i,)            page_list.append(tp1)        if self.current_page >= self.pager_count:            nex = '<a href="#">下一页</a>'        else:            nex = '<a   href="%s?page=%s">下一页</a>' % (self.base_url,self.current_page + 1)        page_list.append(nex)        page_str = "".join(page_list)        return page_str


views文件  尾部为分页

from django.shortcuts import render, HttpResponse, redirectfrom app01 import modelsfrom app01.utils import md5from utils.pagination import Pagefrom django.views.decorators.csrf import csrf_exempt, csrf_protect# 装饰器:csrf_exempt指定某个视图函数不使用# 装饰器:csrf_protect 指定某个视图函数使用,默认全站不启用import datetime# 用装饰器 可以不用每个views都写获取sessiondef auth(func):    def inner(request, *args, **kwargs):        ck = request.session.get('yyyyyyyy')        print(ck)        if not ck:            return redirect('/login.html')        return func(request, *args, **kwargs)    return inner# Create your views here.def index(request):    # 获取cookie    # ck = request.COOKIES.get('uuuuuuuu')    # 获取session    ck = request.session.get('yyyyyyyy')    print(ck)    if not ck:        return redirect('/login.html')    user = request.session.get('yyyyyyyy')    return render(request, 'index.html', {'user': user})@authdef order(request):    return HttpResponse('订单列表')def login(request):    if request.method == "GET":        return render(request, 'login.html', locals())    else:        user = request.POST.get('user')        pwd = request.POST.get('pwd')        pwd = md5.encrypt(pwd)        obj = models.UserInof.objects.filter(username=user, password=pwd).first()        # if user == 'alex' and pwd == '123':        if obj:            # #添加cookie            # response=redirect('/index.html')            # deadline=datetime.datetime.utcnow() +datetime.timedelta(seconds=5)            # response.set_cookie('uuuuuuuu',user,expires=deadline,path='/')            # return response            # session            # 生成随机字符串            # cookie发送给客户端            # 服务端随机字符串为key  自己设置一些value            request.session['yyyyyyyy'] = user            return redirect('/index.html')        else:            return render(request, 'login.html', {'msg': '用户名或密码错误'})def logout(request):    request.session.clear()    return redirect('/index.html')def icbc(request):    if request.method == 'GET':        return render(request, 'icbc.html')    else:        return HttpResponse('...')def test(request):    # return render(request,'test.html',{'a':123})    return render(request, 'test.html', {'a': 'xp'})## def hosts(request):#     '''#     主机列表#     :param request:请求相关的所有数据#     :return:#     '''##     # 创建三百条数据#     # for i in range(1,303):#     #     # models.Host.objects.bulk_create()#     #     hostname='c%s.com' %i#     #     port=i#     #     models.Host.objects.create(hostname=hostname,port=port)#     # return HttpResponse('创建成功')##     # 当前页#     current_page = int(request.GET.get('page'))#     # 每页显示10条数据#     per_page = 10##     start = (current_page - 1) * per_page#     end = current_page * per_page##     host_list = models.Host.objects.all()[start:end]  # []限制范围##     # 生成页码#     # 数据总条数#     all_count = models.Host.objects.all().count()#     pager_count, b = divmod(all_count, per_page)#     if b != 0:#         pager_count += 1##     # 配置页码范围#     pager_page_count = 11#     half_pager = int(pager_page_count / 2)##     # 如果总页码不足#     if pager_count < pager_page_count:#         page_start = 1#         page_end = pager_count#     else:  # 数据已经超过11条 判断当前页的大小#         if current_page <= half_pager:#             page_start = 1#             page_end = 11#         else:#             # 如果当前页码+5大于总页码  结尾按总页码#             if current_page + 5 > pager_count:#                 page_end = pager_count#                 page_start = pager_count - per_page#             else:#                 page_start = current_page - half_pager#                 page_end = current_page + half_pager##     page_list = []#     if current_page == 1:#         prev = '<a href="#">上一页</a>'#     else:#         prev = '<a   href="/hosts.html/?page=%s">上一页</a>' % (current_page - 1)#     page_list.append(prev)#     # for i in range(1,pager_count+1):#     for i in range(page_start, page_end + 1):#         if current_page == i:#             tp1 = '<a class="active" href="/hosts.html/?page=%s">%s</a>' % (i, i,)#         else:#             tp1 = '<a href="/hosts.html/?page=%s">%s</a>' % (i, i,)#         page_list.append(tp1)#     if current_page >= pager_count:#         nex = '<a href="#">下一页</a>'#     else:#         nex = '<a   href="/hosts.html/?page=%s">下一页</a>' % (current_page + 1)#     page_list.append(nex)#     page_str = "".join(page_list)#     # page_str = '''#     ##     #  <a href="/hosts.html/?page=2">2</a>#     #  <a href="/hosts.html/?page=3">3</a>#     #  <a href="/hosts.html/?page=4">4</a>#     # '''#     return render(request, 'hosts.html', {'host_list': host_list, 'page_str': page_str})def hosts(request):    current_page=int(request.GET.get('page'))    all_count=models.Host.objects.all().count()    # page_obj=Page(current_page,all_count,'/hosts.html')    page_obj=Page(current_page,all_count,request.path_info)   #path_info包含当前url    # host_list=models.Host.objects.all()[page_obj.start(),page_obj.end()] 添加property装饰器后不用再加()调用    host_list = models.Host.objects.all()[page_obj.start:page_obj.end]    page_str=page_obj.page_html()    return render(request, 'hosts.html', {'host_list': host_list, 'page_str': page_str})


models.py内容

from django.db import models# Create your models here.class UserInof(models.Model):    username = models.CharField(max_length=32)    password = models.CharField(max_length=32)    email = models.EmailField(null=True)class Host(models.Model):    hostname = models.CharField(max_length=32)    port = models.CharField(max_length=10)

urls.py文件内容

url(r'^hosts.html/', views.hosts),


原创粉丝点击