django 自定义分页模块

django 自定义分页模块

from django.shortcuts import render, HttpResponse, redirect
from django.utils.safestring import mark_safe

class Page(object):
    def __init__(self, current_page):
        self.current_page = int(current_page)

    @property
    def start(self):
        return (self.current_page - 1)*10

    @property
    def end(self):
        return self.current_page * 10

    def page_str(self, all_item, base_url):
        all_page, div = divmod(all_item, 10)
        if div > 0:
            all_page += 1

        page_list = []

        if all_page <= 11:
            start = 1
            end = 11
        else:
            if self.current_page <= 6:
                start = 1
                end = 11 + 1
            else:
                start = self.current_page - 5
                end = self.current_page + 6
                if self.current_page + 6 > all_page:
                    start = all_page - 10
                    end = all_page + 1
        for i in range(start, end):
            if i == self.current_page:
                temp = '<a style="color:red;font-size:26px;padding: 5px" href="%s?page=%d">%d</a>' % (base_url, i, i)
            else:
                temp = '<a style="padding: 5px" href="%s?page=%d">%d</a>' % (base_url, i, i)
            page_list.append(temp)

        if self.current_page > 1:
            pre_page = '<a href="%s?page=%d">上一页</a>' % (base_url, self.current_page - 1)
        else:
            pre_page = '<a href="javascript:void(0);">上一页</a>'

        # 下一页
        if self.current_page >= all_page:
            next_page = '<a href="javascript:void(0);">下一页</a>'
        else:
            next_page = '<a href="%s?page=%d">下一页</a>' % (base_url, self.current_page + 1)

        page_list.insert(0, pre_page)
        page_list.append(next_page)
        return mark_safe("".join(page_list))


def user_list(request):
    current_page = request.GET.get('page', 1)
    page_obj = Page(current_page)
    # 把方法改造成属性(2),这样在下面调用方法的时候就不需要加括号了
    result = models.UserInfo.objects.all()[page_obj.start:page_obj.end]
    all_item = models.UserInfo.objects.all().count()
    page_str = page_obj.page_str(all_item, '/user_list/')
    return render(request, 'user_list.html', {"result": result, 'page_str': page_str})

 html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <table>
        {% for line in result %}
            <tr>
                <td>{{ line.user }}</td>
                <td>{{ line.password }}</td>
                <td>{{ line.gender }}</td>
            </tr>
        {% endfor %}
    </table>

    <div>
        {{ page_str }}
    </div>
</body>
</html>
原文地址:https://www.cnblogs.com/yxy-linux/p/5978253.html