Django基础笔记2(分页)

Django

Django自带的分页功能

from django.core.paginator import Paginator  # 用于分页
curPage = request.GET.get('page')
    uL = models.userInfo.objects.all()
    #   list,每页多少个
    pag = Paginator(uL, 10)
    # list
    # 每页个数
    posts = pag.page(eval(curPage))  # 当前是第几页,可由用户发送请求确定;此对象还可判断有无下一页上一页
    return render(request, './App2/index.html', {
        'userList': posts,

    })
<div>
    {% if  userList.has_previous %}
    <a href="./?page={{ userList.previous_page_number }}">上一页</a>
    {% endif %}
    {% for i in  userList.paginator.page_range %}
        <a href="./?page={{ i }}">{{ i }}</a>
    {% endfor %}
    {% if userList.has_next   %}
        <a href="./?page={{ userList.next_page_number  }}">下一页</a>
    {% endif %}
</div>

自己做分页

class Page:
    def __init__(self, curPage, all, perPage, showPage, url, param):
        '''
        :param curPage: 当前页
        :param all: #数据条数
        :param perPage: #每页数据个数
        :param showPage: #展示多少页码
        :param url:地址
        :param param url中所携带的所有参数
        '''
        a, b = divmod(all, perPage)  # 求余,第一个是商,第二个是余数
        if b != 0:
            a = a + 1
        self.allPage = a  # 一共有多少页
        self.showPage = showPage
        self.perPage = perPage
        self.url = url
        self.param = param
        try:
            self.curPage = int(curPage)  # 防止page参数不规范
            if self.curPage > self.allPage:
                self.curPage = self.allPage
        except Exception:
            self.curPage = 1

    def start(self):
        return (self.curPage - 1) * self.perPage

    def end(self):
        return self.curPage * self.perPage

    def pager(self):
        half = int(self.showPage / 2)
        # 小于showPage,全部显示
        if self.allPage < self.showPage:
            begin = 1
            end = self.allPage + 1
        else:  # 大于showPage
            begin = self.curPage - half
            end = self.curPage + half + 1
            # 考虑极值情况
            if self.curPage - half <= 0 or self.curPage + half > self.allPage:
                if self.curPage - half <= 0:
                    begin = 1
                    end = self.showPage + 1
                if self.curPage + half > self.allPage:
                    begin = self.allPage - self.showPage
                    end = self.allPage + 1
        params = []
        for i in self.param:  # 除了page外,url中可能还会有其他参数
            if i.strip() == 'page':  # url?page=1&x=1&y=2
                pass
            else:
                params.append(str(i) + '=' + self.param.get(i))
        p = '&'.join(params)  # x=1&y=2
        pagelist = []
        if self.curPage > 1:
            # 包含了一些bootstrap样式内容
            pagelist.append(
                '<li class="page-item"><a class="page-link" href="%s?page=%s&%s ">上一页</a></li>' % (
                    self.url, self.curPage - 1, p))
        else:
            pagelist.append('<li class="page-item"><a class="page-link">无上一页了</a></li>')
        for i in range(begin, end):
            temp = '<li class="page-item"><a class="page-link" href="%s?page=%s&%s">%s</a></li>' % (self.url, i, p, i)
            if i == self.curPage:
                temp = '<li class="page-item active"><a class="page-link">%s</a></li>' % (i,)
            pagelist.append(temp)
        if self.curPage < self.allPage:
            pagelist.append(
                '<li class="page-item"><a class="page-link" href="%s?page=%s&%s">下一页</a></li>' % (
                    self.url, self.curPage + 1, p))
        else:
            pagelist.append('<li class="page-item"><a class="page-link">无下一页了</a></li>')
        return ' '.join(pagelist)

后台的处理函数

def custom(req):
    curPage = req.GET.get('page')
    perPage = 8  # 每页8个
    userlist = models.userInfo.objects.all()  # filter(id__lt=30)
    page = Page(curPage, len(userlist), perPage, 10,request.path_info,request.GET)
    return render(req, './App2/custom.html', {'userlist': userlist[page.start():page.end()], 'page': page})

|safe 为了避开django的xss防御机制
|safe关键字,防止xss防护机制
还可以在后台加安全标记 mark_safe

posted @ 2022-10-24 19:29  DaoDao777999  阅读(33)  评论(0)    收藏  举报