• 02-分页器,自定义分页器,解耦函数分页器,分页器class


    1 、批量数据导入

    主url

    from django.contrib import admin
    from django.urls import path, re_path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        re_path(r'app01/', include(('app01.urls', 'app01')))
    ]

    urls

    from django.urls import path, re_path, include
    from app01 import views
    
    urlpatterns = [
        re_path(r'^index/$', views.index, name='index')
    ]

    modles

    from django.db import models
    
    class Book(models.Model):
        id = models.AutoField(primary_key=True)
        title = models.CharField(max_length=32)
        price = models.DecimalField(max_digits=8, decimal_places=2)

    数据库迁移

    C:PycharmProjectspagedemo>python manage.py makemigrations
    C:PycharmProjectspagedemo>python manage.py migrate
    

      

    views:批量生成数据

    from django.shortcuts import render
    from app01.models import Book
    
    def index(request):
        # 添加100条书籍数据
        # 方式1:
        for i in range(100):
            Book.objects.create(title='book_%s' % i, price=i*i)
    
        # 方式2:生成100个实例对象,创建效率高
        book_list = []
        for i in range(100):
            book_obj = Book(title="book_%s" % i, price=i*i)
            book_list.append(book_obj)
    
        Book.objects.bulk_create(book_list)  # 批量导入
    
        return render(request, 'index.html')

    views,前台显示所有的book_list

    from django.shortcuts import render
    from app01.models import Book
    
    
    def index(request):
      
        book_list = Book.objects.all()
        return render(request, 'index.html', locals())

    templates 模板层

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <ul>
        {% for book in book_list %}
            <li>{{ book.title }} : {{ book.price }}</li>
        {% endfor %}
    
    </ul>
    </body>
    </html>

    2、分页器的使用

    from django.core.paginator import Paginator     # 分页器

    1、对谁做分页, 每页几条数据

        # 1.对谁做分页, 每页几条数据
        paginator = Paginator(book_list, 12)        # 对book_list数据分页,每页10条数据
    
        print('count:', paginator.count)            # 数据总个数  100
        print('num_page:', paginator.num_pages)     # 总页数      9
        print('per_page', paginator.per_page)       # 每页显示条目数量   12
        print('page_range', paginator.page_range)   # 页码的列表   range(1, 10)
        print('page', paginator.page)               # page对象    <django.core.paginator.Paginator object at 0x0412EAF0>

     

    2.显示某一页的具体数据的两种方法

    # 方式1:固定页码num
        page1 = paginator.page(1)                   # 获取第1页的page对象
        print("object_list", page1.object_list)     # page的object_list属性
        for item in page1:                          # for打印每条数据对象
            print(item)
    
        # 方式2:动态获取当前页码num
        print(request.GET)                               # http://127.0.0.1:8000/app01/index/?page=1
        current_page_num = int(request.GET.get("page"))  # 1   <QueryDict: {'page': ['2']}>
     current_page = paginator.page(current_page_num)       # 当前num页码的page对象

    3、模板层显示数据

    <ul>
        {% for book in current_page %}
            <li>{{ book.title }} : {{ book.price }}</li>
        {% endfor %}
    
    </ul>

    4、超过page范围,异常捕获

     

    from django.core.paginator import Paginator, EmptyPage   # 分页器
    
        try:
            print(request.GET)  # http://127.0.0.1:8000/app01/index/?page=1
            current_page_num = int(request.GET.get("page", '1'))  # 1    # <QueryDict: {'page': ['2']}>
            current_page = paginator.page(current_page_num)
        except EmptyPage as e:
            current_page = paginator.page(1)
        except ValueError as e:
            current_page = paginator.page(1)

     5、代码

    views视图

    from django.shortcuts import render
    from app01.models import Book
    from django.core.paginator import Paginator, EmptyPage   # 分页器
    
    
    def index(request):
        # 添加100条书籍数据
        # 方式1:
        for i in range(100):
            Book.objects.create(title='book_%s' % i, price=i*i)
    
        # 方式2:生成100个实例对象,创建效率高
        book_list = []
        for i in range(100):
            book_obj = Book(title="book_%s" % i, price=i*i)
            book_list.append(book_obj)
    
        Book.objects.bulk_create(book_list)  # 批量导入
    
        book_list = Book.objects.all()
    
        # 分页器的使用
    
        # 1.对谁做分页, 每页几条数据
        paginator = Paginator(book_list, 12)        # 对book_list数据分页,每页12条数据
    
        print('count:', paginator.count)            # 数据总个数  100
        print('num_page:', paginator.num_pages)     # 总页数      9
        print('per_page', paginator.per_page)       # 每页显示条目数量   12
        print('page_range', paginator.page_range)   # 页码的列表   range(1, 10)
        print('page', paginator.page)               # page对象    <django.core.paginator.Paginator object at 0x0412EAF0>
    
        # 2.显示某一页的具体数据的两种方法
        # 方式1:固定页码num
        page1 = paginator.page(1)                   # 获取第1页的page对象
        print("object_list", page1.object_list)     # page的object_list属性
        for item in page1:                          # for打印每条数据对象
            print(item)
    
        # 方式2:动态获取当前页码num
    
        try:
            print(request.GET)  # http://127.0.0.1:8000/app01/index/?page=1
            current_page_num = int(request.GET.get("page", '1'))  # 1    # <QueryDict: {'page': ['2']}>
            current_page = paginator.page(current_page_num)
        except EmptyPage as e:
            current_page = paginator.page(1)
        except ValueError as e:
            current_page = paginator.page(1)
    
        return render(request, 'index.html', locals())

     模板层

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <ul>
        {% for book in current_page %}
            <li>{{ book.title }} : {{ book.price }}</li>
        {% endfor %}
    
    </ul>
    </body>
    </html>

    3、bootstrap页码

    1、配置

    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    
    <!-- 可选的 Bootstrap 主题文件(一般不用引入) -->
    <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
    
    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
    View Code

    <nav aria-label="Page navigation">
      <ul class="pagination">
        <li>
          <a href="#" aria-label="Previous">
            <span aria-hidden="true">&laquo;</span>
          </a>
        </li>
        <li><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
        <li><a href="#">4</a></li>
        <li><a href="#">5</a></li>
        <li>
          <a href="#" aria-label="Next">
            <span aria-hidden="true">&raquo;</span>
          </a>
        </li>
      </ul>
    </nav>
    View Code

    2、正常页码显示

    <nav aria-label="Page navigation">
        <ul class="pagination">
            <li>
                <a href="#" aria-label="Previous">
                    <span aria-hidden="true">上一页</span>
                </a>
            </li>
    
            {% for item in paginator.page_range %}
                <li><a href="?page={{ item }}">{{ item }}</a></li>
            {% endfor %}
    
            <li>
                <a href="#" aria-label="Next">
                    <span aria-hidden="true">下一页</span>
                </a>
            </li>
        </ul>
    </nav>

    3、页码点击,active

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
        <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"
              integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    </head>
    <body>
    <ul>
        {% for book in current_page %}
            <li>{{ book.title }} : {{ book.price }}</li>
        {% endfor %}
    
    </ul>
    <nav aria-label="Page navigation">
        <ul class="pagination">
            <li>
                <a href="#" aria-label="Previous">
                    <span aria-hidden="true">上一页</span>
                </a>
            </li>
    
            {% for item in paginator.page_range %}
                {% if item == current_page_num %}
                    <li class="active"><a href="?page={{ item }}">{{ item }}</a></li>
                {% else %}
                    <li><a href="?page={{ item }}">{{ item }}</a></li>
                {% endif %}
            {% endfor %}
    
            <li>
                <a href="#" aria-label="Next">
                    <span aria-hidden="true">下一页</span>
                </a>
            </li>
        </ul>
    </nav>
    </body>
    </html>
    View Code

    4、上一页,下一页

    设置add+1  add-1

    bug:页码超出限制,出现bug

     view视图代码

        # 4.上一页,下一页
        try:
            print(current_page.has_previous())             # 是否有上一页
            print(current_page.previous_page_number())     # 上一页的页码
    
            print(current_page.has_next())                  # 是否有下一页
            print(current_page.next_page_number())          # 下一页的页码
        except EmptyPage as e:
            pass
        
    from django.shortcuts import render
    from app01.models import Book
    from django.core.paginator import Paginator, EmptyPage   # 分页器
    
    
    def index(request):
        # 添加100条书籍数据
        # 方式1:
        # for i in range(100):
        #     Book.objects.create(title='book_%s' % i, price=i*i)
    
        # 方式2:生成100个实例对象,创建效率高
        # book_list = []
        # for i in range(100):
        #     book_obj = Book(title="book_%s" % i, price=i*i)
        #     book_list.append(book_obj)
        #
        # Book.objects.bulk_create(book_list)  # 批量导入
        #
        book_list = Book.objects.all()
    
        # 分页器的使用
    
        # 1.对谁做分页, 每页几条数据
        paginator = Paginator(book_list, 12)        # 对book_list数据分页,每页10条数据
    
        print('count:', paginator.count)            # 数据总个数  100
        print('num_page:', paginator.num_pages)     # 总页数      9
        print('per_page', paginator.per_page)       # 每页显示条目数量   12
        print('page_range', paginator.page_range)   # 页码的列表   range(1, 10)
        print('page', paginator.page)               # page对象    <django.core.paginator.Paginator object at 0x0412EAF0>
    
        # 2.显示某一页的具体数据的两种方法
        # 方式1:固定页码num
        page1 = paginator.page(1)                   # 获取第1页的page对象
        print("object_list", page1.object_list)     # page的object_list属性
        for item in page1:                          # for打印每条数据对象
            print(item)
    
        # 方式2:动态获取当前页码num
        # print(request.GET)  # http://127.0.0.1:8000/app01/index/?page=1
        # current_page_num = int(request.GET.get("page", '1'))  # 1    # <QueryDict: {'page': ['2']}>
        # current_page = paginator.page(current_page_num)
    
        # 3.抛出Empty异常
        try:
            print(request.GET)  # http://127.0.0.1:8000/app01/index/?page=1
            current_page_num = int(request.GET.get("page", '1'))  # 1    # <QueryDict: {'page': ['2']}>
            current_page = paginator.page(current_page_num)
        except EmptyPage as e:
            current_page = paginator.page(1)
        except ValueError as e:
            current_page = paginator.page(1)
    
        # 4.上一页,下一页
        try:
            print(current_page.has_previous())             # 是否有上一页
            print(current_page.previous_page_number())     # 上一页的页码
    
            print(current_page.has_next())                  # 是否有下一页
            print(current_page.next_page_number())          # 下一页的页码
        except EmptyPage as e:
            pass
    
        """
        if 当前page对象有 上一页
            <a href="?page={{ current_page.previous_page_number }}">
        else:
            <a href="">
        """
    
        return render(request, 'index.html', locals())
    Views视图

    模板层:

     伪代码实现:

        if 当前page对象有 上一页
            <a href="?page={{ current_page.previous_page_number }}">
        else:
            <a href="">    
    # 上一页
            {% if current_page.has_previous %}
                <li>
                    <a href="?page={{ current_page.previous_page_number }}" aria-label="Previous"><span aria-hidden="true">上一页</span></a>
                </li>
            {% else %}
                <li class="disabled">
                    <a href="" aria-label="Previous"><span aria-hidden="true">上一页</span></a>
                </li>
            {% endif %}
    
    
    # 下一页
            {% if current_page.has_next %}
                <li>
                    <a href="?page={{ current_page.next_page_number }}" aria-label="Next"><span aria-hidden="true">下一页</span></a>
                </li>
            {% else %}
                <li class="disabled">
                    <a href="" aria-label="Next"><span aria-hidden="true">下一页</span></a>
                </li>
            {% endif %}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
        <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"
              integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    </head>
    <body>
    <ul>
        {% for book in current_page %}
            <li>{{ book.title }} : {{ book.price }}</li>
        {% endfor %}
    
    </ul>
    <nav aria-label="Page navigation">
        <ul class="pagination">
    
    {#        上一页#}
            {% if current_page.has_previous %}
                <li>
                    <a href="?page={{ current_page.previous_page_number }}" aria-label="Previous"><span aria-hidden="true">上一页</span></a>
                </li>
            {% else %}
                <li class="disabled">
                    <a href="" aria-label="Previous"><span aria-hidden="true">上一页</span></a>
                </li>
            {% endif %}
    
    
    
            {% for item in paginator.page_range %}
                {% if item == current_page_num %}
                    <li class="active"><a href="?page={{ item }}">{{ item }}</a></li>
                {% else %}
                    <li><a href="?page={{ item }}">{{ item }}</a></li>
                {% endif %}
            {% endfor %}
    
    
    {#    下一页#}
            {% if current_page.has_next %}
                <li>
                    <a href="?page={{ current_page.next_page_number }}" aria-label="Next"><span aria-hidden="true">下一页</span></a>
                </li>
            {% else %}
                <li class="disabled">
                    <a href="" aria-label="Next"><span aria-hidden="true">下一页</span></a>
                </li>
            {% endif %}
    
        </ul>
    </nav>
    </body>
    </html>
    View Code

     

    5、每页只显示10个,左边5个,右边5个

    views

    html

     

    bug:

    头部:如果current_page_num = 1则显示前5个数据

    尾部:如果currnet_page_num=100 则多余显示后5个数据

     views代码

    from django.shortcuts import render
    from app01.models import Book
    from django.core.paginator import Paginator, EmptyPage   # 分页器
    
    
    def index(request):
        # 添加100条书籍数据
        # 方式1:
        # for i in range(100):
        #     Book.objects.create(title='book_%s' % i, price=i*i)
    
        # 方式2:生成100个实例对象,创建效率高
        # book_list = []
        # for i in range(100):
        #     book_obj = Book(title="book_%s" % i, price=i*i)
        #     book_list.append(book_obj)
        #
        # Book.objects.bulk_create(book_list)  # 批量导入
        #
        book_list = Book.objects.all()
    
        # 分页器的使用
    
        # 1.对谁做分页, 每页几条数据
        paginator = Paginator(book_list, 12)        # 对book_list数据分页,每页10条数据
    
        print('count:', paginator.count)            # 数据总个数  100
        print('num_page:', paginator.num_pages)     # 总页数      9
        print('per_page', paginator.per_page)       # 每页显示条目数量   12
        print('page_range', paginator.page_range)   # 页码的列表   range(1, 10)
        print('page', paginator.page)               # page对象    <django.core.paginator.Paginator object at 0x0412EAF0>
    
        # 2.显示某一页的具体数据的两种方法
        # 方式1:固定页码num
        page1 = paginator.page(1)                   # 获取第1页的page对象
        print("object_list", page1.object_list)     # page的object_list属性
        for item in page1:                          # for打印每条数据对象
            print(item)
    
        # 方式2:动态获取当前页码num
        # print(request.GET)  # http://127.0.0.1:8000/app01/index/?page=1
        # current_page_num = int(request.GET.get("page", '1'))  # 1    # <QueryDict: {'page': ['2']}>
        # current_page = paginator.page(current_page_num)
    
        # 3.抛出Empty异常
        try:
            print(request.GET)  # http://127.0.0.1:8000/app01/index/?page=1
            current_page_num = int(request.GET.get("page", '1'))  # 1    # <QueryDict: {'page': ['2']}>
            current_page = paginator.page(current_page_num)
        except EmptyPage as e:
            current_page = paginator.page(1)
        except ValueError as e:
            current_page = paginator.page(1)
    
        # 4.上一页,下一页
        try:
            print(current_page.has_previous())             # 是否有上一页
            print(current_page.previous_page_number())     # 上一页的页码
    
            print(current_page.has_next())                  # 是否有下一页
            print(current_page.next_page_number())          # 下一页的页码
        except EmptyPage as e:
            pass
    
        """
        if 当前page对象有 上一页
            <a href="?page={{ current_page.previous_page_number }}">
        else:
            <a href="">
        """
    
        return render(request, 'index.html', locals())
    
    
    def my_index(request):
        book_list = Book.objects.all()                              # 要分页的data
        paginator = Paginator(book_list, 3)                         # 怎么分页
        current_page_num = int(request.GET.get('page', '1'))        # 获取url中的?page=1
        print(paginator.num_pages)                                  # 总页数  100
        print(paginator.page_range, type(paginator.page_range))     # 页码的列表  range(1, 101) <class 'range'>
    
        if paginator.num_pages > 11:
            if current_page_num < 5:                         # ?page=1,2,3,4,5
                page_range = range(1, 12)
            elif current_page_num > paginator.num_pages-5:   # ?page > 总num-5
                page_range = range(paginator.num_pages-10, paginator.num_pages+1)
            else:                                           # ?page=其他
                page_range = range(current_page_num - 4, current_page_num + 6)
        else:
            page_range = paginator.page_range                               # 页码的总列表  range(1, 101)
    
        current_page = paginator.page(current_page_num)                     # 获取当前页的page对象
    
        return render(request, 'my_index.html', locals())
    Views

    模板层代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
        <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"
              integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    </head>
    <body>
    {#book内容#}
        <ul>
            {% for book in current_page %}
                <li>{{ book.title }} : {{ book.price }}</li>
            {% endfor %}
        </ul>
    
    <nav aria-label="Page navigation">
        <ul class="pagination">
    
    {#        上一页#}
            {% if current_page.has_previous %}
                <li>
                    <a href="?page={{ current_page.previous_page_number }}" aria-label="Previous"><span aria-hidden="true">上一页</span></a>
                </li>
            {% else %}
                <li class="disabled">
                    <a href="" aria-label="Previous"><span aria-hidden="true">上一页</span></a>
                </li>
            {% endif %}
    
    
    {#中间数字部分#}
            {#        {% for item in paginator.page_range %}   所有的页码列表 #}
            {% for item in page_range %}
                {% if item == current_page_num %}
                    <li class="active"><a href="?page={{ item }}">{{ item }}</a></li>
                {% else %}
                    <li><a href="?page={{ item }}">{{ item }}</a></li>
                {% endif %}
            {% endfor %}
    
    
    {#    下一页#}
            {% if current_page.has_next %}
                <li>
                    <a href="?page={{ current_page.next_page_number }}" aria-label="Next"><span
                            aria-hidden="true">下一页</span></a>
                </li>
            {% else %}
                <li class="disabled">
                    <a href="" aria-label="Next"><span aria-hidden="true">下一页</span></a>
                </li>
            {% endif %}
    
        </ul>
    </nav>
    </body>
    </html>
    模板层

    4、解耦的分页器代码

    1、总结,分页时需要做三件事:

    • 创建处理分页数据的类
    • 根据分页数据获取数据
    • 输出分页HTML,即:[上一页][1][2][3][4][5][下一页]

    主url

    from django.contrib import admin
    from django.urls import path, re_path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        re_path(r'app01/', include(('app01.urls', 'app01')))
    ]

    分url

    from django.urls import path, re_path, include
    from app01 import views
    
    urlpatterns = [
        re_path(r'^blog/$', views.blog, name='blog')
    ]

     

    2、views视图如何调用 页码函数

    from django.shortcuts import render
    from app01.models import Book
    from app01.pagination import mypaginator        # 导入分页py
    
    
    def blog(request):
        book_list = Book.objects.all()       # 分页的对象
        current_page_num = int(request.GET.get('page', '1'))  # url中的?page=22   当前页码num
    
        show_data_num = 3           # 每页要显示几个obj对象
        show_page_num = 11          # 页码list总共显示多少个
    
        page_range, current_page = mypaginator(book_list, current_page_num, show_data_num, show_page_num)    # 生成页码列表range
    
        return render(request, 'blog.html', locals())

    3、重点:解耦后的页码函数

    from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger  # 分页器
    
    
    def mypaginator(book_list, current_page_num, show_data_num, show_page_num):
        paginator = Paginator(book_list, show_data_num)   # 要分页的对象
        all_page_num = paginator.num_pages                # 总共的page数量
        half_page = int(show_page_num / 2)
    
        try:
            current_page = paginator.page(current_page_num)   # 当前页码总共要显示的obj对象
        except EmptyPage:                       # http://127.0.0.1:8000/app01/blog/?page=-22
            current_page = paginator.page(1)
        except PageNotAnInteger:                # http://127.0.0.1:8000/app01/blog/?dafdsaf
            current_page = paginator.page(1)
    
        if all_page_num > show_page_num:
            if current_page_num < half_page + 1:
                page_range = range(1, show_page_num + 1)
                print('头部', page_range)
            elif current_page_num > all_page_num - half_page:
                page_range = range(all_page_num - show_page_num + 1, all_page_num + 1)
                print('尾部', page_range)
            else:
                page_range = range(current_page_num - half_page, current_page_num + half_page + 1)
                print('中间', page_range)
        else:
            page_range = range(1, all_page_num + 1)
            print('1', page_range)
    
        return page_range, current_page

    4、武sir的page页码类

    http://www.cnblogs.com/wupeiqi/articles/5246483.html

    还 不明白

    #!/usr/bin/env python
    # _*_coding:utf-8_*_
    from django.utils.safestring import mark_safe
     
    class PageInfo(object):
        def __init__(self,current,totalItem,peritems=5):
            self.__current=current
            self.__peritems=peritems
            self.__totalItem=totalItem
        def From(self):
            return (self.__current-1)*self.__peritems
        def To(self):
            return self.__current*self.__peritems
        def TotalPage(self):  #总页数
            result=divmod(self.__totalItem,self.__peritems)
            if result[1]==0:
                return result[0]
            else:
                return result[0]+1
     
    def Custompager(baseurl,currentPage,totalpage):  #基础页,当前页,总页数
        perPager=11
        #总页数<11
        #0 -- totalpage
        #总页数>11
            #当前页大于5 currentPage-5 -- currentPage+5
                #currentPage+5是否超过总页数,超过总页数,end就是总页数
            #当前页小于5 0 -- 11
        begin=0
        end=0
        if totalpage <= 11:
            begin=0
            end=totalpage
        else:
            if currentPage>5:
                begin=currentPage-5
                end=currentPage+5
                if end > totalpage:
                    end=totalpage
            else:
                begin=0
                end=11
        pager_list=[]
        if currentPage<=1:
            first="<a href=''>首页</a>"
        else:
            first="<a href='%s%d'>首页</a>" % (baseurl,1)
        pager_list.append(first)
     
        if currentPage<=1:
            prev="<a href=''>上一页</a>"
        else:
            prev="<a href='%s%d'>上一页</a>" % (baseurl,currentPage-1)
        pager_list.append(prev)
     
        for i in range(begin+1,end+1):
            if i == currentPage:
                temp="<a href='%s%d' class='selected'>%d</a>" % (baseurl,i,i)
            else:
                temp="<a href='%s%d'>%d</a>" % (baseurl,i,i)
            pager_list.append(temp)
        if currentPage>=totalpage:
            next="<a href='#'>下一页</a>"
        else:
            next="<a href='%s%d'>下一页</a>" % (baseurl,currentPage+1)
        pager_list.append(next)
        if currentPage>=totalpage:
            last="<a href=''>末页</a>"
        else:
            last="<a href='%s%d'>末页</a>" % (baseurl,totalpage)
        pager_list.append(last)
        result=''.join(pager_list)
        return mark_safe(result)   #把字符串转成html语言
    
    分页实例
    View Code
  • 相关阅读:
    Visual Studio 2012 中的ASP.NET Web API
    CentOS配置RPMForge软件源
    CentOS设置Mono环境变量
    使用 MEF 轻松实现云部署
    WiX 3.6——强大的.NET部署工具
    Redis应用场景
    How does it work in Mono's C# compiler?
    .NET程序员应该关注开源社区
    ASP.NET Web API和依赖注入
    [招聘帖]IT应用开发工程师
  • 原文地址:https://www.cnblogs.com/venicid/p/9302313.html
Copyright © 2020-2023  润新知