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>
时间: 2024-10-03 15:01:30

django 自定义分页模块的相关文章

Django自定义分页、bottle

一.使用django实现之定义分页 1.自定义分页在django模板语言中,通过a标签实现; 2.前段a标签使用<a href="/user_list/?page=1">1</a>,将page的值传送到函数/user_list/中,后端在user_list中通过request.GET.get('page',1)获取当前页; 3.从数据库中获取特定行的数据,使用result = models.UserList.objects.all()[start:end]获取,

Django 自定义分页类

分页类代码: class Page(object): ''' 自定义分页类 可以实现Django ORM数据的的分页展示 输出HTML代码: 使用说明: from utils import mypage page_obj = mypage.Page(total_num, current_page, 'publisher_list') publisher_list = data[page_obj.data_start:page_obj.data_end] page_html = page_obj.

DJANGO 自定义分页组件

第一次在码云上面分享代码片段,记录一下: https://gitee.com/trunkslisa/codes/14gkxi3zf9e2ulbvjnqyo90 class Pagination(object): def __init__(self, totalCount, currentPage, perPageNum=20, maxPageNum=7): # 传入: # -所有数据的个数 totalCount self.totalCount = totalCount # -当前页 curren

python/Djangof分页与自定义分页

python/Djangof分页与自定义分页 Django分页 1 ##============================================分页======================================================= 2 # current_pagc = request.GET.get('page') 3 # from django.core.paginator import Paginator,Page 4 # # result = m

Django内置的分页模块

自定义分页 未封装版: 优点:直观 缺点:代码乱,不易维护,可拓展性差 data = [] for i in range(1, 302): tmp = {"id": i, "name": "alex-{}".format(i)} data.append(tmp) print(data) def user_list(request): # user_list = data[0:10] # user_list = data[10:20] try: c

Django学习手册 - 初识自定义分页

核心: <a href='http://127.0.0.1:8000/index-%s'>%s<a> 自定义分页 1.前端处理字符 后端的字符  return render(request,"index.html",{"l传到前端的数据":list}) {{ 传到前端的数据 | safe}} 2.后端处理字符 导入处理的模块 from django.utils.safestring import mark_safe mark_safe(需要处

django 自定义user使用权限管理模块

这篇文章主要是讲如何让自定义的user模块也能用到django.contrib.auth中的权限管理模块 看这篇文章之前请先看一下我前边的两篇文章,本文以这两篇文章为基础: django 自定义 USER 用源码告诉你django权限管理是怎么回事 下边是一个大概的实现,后边再做详细分析: 1.user model自定义 class AbstractUser(models.Model): # 登录信息 id = models.AutoField(primary_key=True) staff =

8.2 Django 分页组件替换自定义分页

Django的分页器(paginator) 总之不太好用我们还是用自己的好一些 自定义分页器 分页实现源码 """ 自定义分页组件 """ class Pagination(object): def __init__(self, current_page, all_count, base_url, params, per_page_num=8, pager_count=11, ): """ 封装分页相关数据 :par

Python之路【第十九篇】自定义分页实现(模块化)

自定义分页 1.目的&环境准备 目的把分页写成一个模块的方式然后在需要分页的地方直接调用模块就行了. 环境准备Django中生成一个APP并且注册,配置URL&Views 配置URL from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^user_lis