Django的分页和中间件

一、分页

Django的分页器(paginator)

view.py

from django.shortcuts import render,HttpResponse

# Create your views here.

from app09 import models

# 导入分页模块from django.core.paginator import Paginator# 做分页# 分页器的对象,需要传object_list(要分页的所有数据queryset对象), per_page(每页要显示的个数),

def paginator(request):    book_l = models.Book.objects.all().order_by(‘pk‘)    paginator = Paginator(book_l, 40)

try:        #只写page,默认是none,我们默认是第一页。        currentpage = int(request.GET.get(‘page‘,1))        # page传个页码数,比如传1,就是每一页的对象,paginator相当于一本书,paginator.page就相当于书的具体的哪一页

# 取出书的第一页,第一页的对象,page是每一页的对象        # page = paginator.page(1)

page = paginator.page(currentpage)    except Exception as e:        #如果输入法的不合法就显示第一页,就不会报错        currentpage = 1        page = paginator.page(currentpage)

#传入页码数,拿到的就是当前页对象    page = paginator.page(currentpage)

# page_range = paginator.page_range

#1 总页数是否大于11,当总页码数大于11时    if paginator.num_pages >11:        #1.1 当前页码数是否小于6        if currentpage  <=6:            #1.1.1 当前页码数小于6的时候,就生成11个页码数            page_range = range(1,12)            #1.2 当前页码数+5大于总页码数        elif currentpage + 5 >= paginator.num_pages:            # 1.2.1 往后推11页页码数            page_range = range(paginator.num_pages - 10,paginator.num_pages + 1)            # 1.3 当前页码数大于6,就生成一个左5 右5的区间        else:            page_range = range(currentpage - 5,currentpage + 6)    #2 总页码数不大于11的是有,页码有多少显示多少页码    else:        page_range = paginator.page_range

# 总数据条数    print(‘总数据条数‘, paginator.count)    print(‘总页数‘, paginator.num_pages)

# 需要在前端显示出来    print(‘页码的列表‘, paginator.page_range)    print(‘页码的列表‘, list(paginator.page_range))

# page传个页码数,比如传1,就是每一页的对象,paginator相当于一本书,paginator.page就相当于书的具体的哪一页

# 取出书的第一页,第一页的对象,page是每一页的对象# page = paginator.page(1)

# page = paginator.page(currentpage)

# 每次从这一页中拿出一个个的书# 在模板中for循环这个就可以拿出数据#     for book in page:        # print(book.name)    # print(page.has_next())                    #是否有下一页    # print(page.next_page_number())            #是否有下一页的页码    # print(page.has_previous())                #是否有上一页    # print(page.previous_page_number())        #是否有上一页的页码

#     去写模板

return render(request, ‘pagintaor.html‘, locals())

def booklist(request):    book_l = models.Book.objects.all()

return HttpResponse(‘OK‘)

# 批量生产数据# def createbook(request):#     # 插入104本书(对象),先生成列表#     li = []#     for i in range(105):#         li.append(models.Book(name=‘honglpimeng%s‘%i,price=1+i))#     res = models.Book.objects.bulk_create(li,20)##     return HttpResponse(‘OK‘)

<><><><><><><><><<><><><><><><><><><><><><><><><><><><><><><><><><><><><><

HTML
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    {#    引入bootstrap#}    <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">    <title>Title</title></head><body>

<table class="table table-bordered">    <thead>    <tr>        <th>序号</th>        <th>书名</th>        <th>价格</th>    </tr>    </thead>    <tbody>    {% for book in page %}        <tr>            <td>{{ forloop.counter }}</td>            <td>{{ book.name }}</td>            <td>{{ book.price }}</td>        </tr>

{% endfor %}

</tbody>

</table>

{#//加分页   让有多少页就显示多少页#}<nav aria-label="Page navigation">    <ul class="pagination">    {% if page.has_previous %}        <li>{#            <a href="/paginator/?page={{ page.previous_page_number }}" aria-label="Previous">#}            <a href="/paginator/?page={{ 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 foo in page_range %}

{% if currentpage == foo %}                {#   变色,判断当前页面是不是循环到的页面,如果是加active#}                <li class="active"><a href="/paginator/?page={{ foo }}">{{ foo }}</a></li>

{% else %}                <li><a href="/paginator/?page={{ foo }}">{{ foo }}</a></li>

{% endif %}

{% endfor %}

{% if page.has_next %}            <li>{#                <a href="/paginator/?page={{ page.next_page_number }}" aria-label="Next">#}                <a href="/paginator/?page={{ 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>

<><><><><><><><><<><><><><><><><><><><><><><><><><><><><><><><><><><><><><


原文地址:https://www.cnblogs.com/zhangrenguo/p/10290215.html

时间: 2024-10-02 10:52:59

Django的分页和中间件的相关文章

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 (se

django orm 分页(paginator)取数据出现警告manage.py:1: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list: &lt;class &#39;sign.models.Guest&#39;&gt; QuerySet.

使用django的orm做分页(Paginator)时出现了下面的警告 In [19]: p=Paginator(guest_list,2) manage.py:1: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list: <class 'sign.models.Guest'> QuerySet. #!/usr/bin/env python 网上搜的

Django基础九之中间件

目录 Django基础九之中间件 一 前戏 二 中间件介绍 三 自定义中间件 自定义一个中间件示例 process_request process_response process_view process_exception process_template_response(用的比较少) 四 中间件执行流程 五 中间件版登陆认证 六 中间件案例 应用案例 1.做IP访问频率限制 2.URL访问过滤 源码试读 Django基础九之中间件 本节目录 一 前戏 我们在前面的课程中已经学会了给视图函

分页和中间件

一.分页 Django的分页器(paginator) view.py from django.shortcuts import render,HttpResponse # Create your views here. from app01.models import * from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger def index(request): ''' 批量导入数据: Booklist

Django组件——分页器和中间件

分页器 Django内置分页器(paginator) 分页器函数为paginator,里面有几个重要的参数需要我们了解 paginator = Paginator(book_list, 10) #第二个参数表示每页显示的数量 paginator.count) #数据总数 paginator.num_pages #总页数 paginator.page_range #页码的列表 page1=paginator.page(1) #第1页的page对象 for i in page1: #遍历第1页的所有

DAY18-Django之分页和中间件

分页 Django的分页器(paginator) view from django.shortcuts import render,HttpResponse # Create your views here. from app01.models import * from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger def index(request): ''' 批量导入数据: Booklist=[] f

Django html 分页

16.分页 django 自带的分页:django paginator 参考:https://docs.djangoproject.com/en/1.10/topics/pagination/ >>> from django.core.paginator import Paginator >>> objects = ['john', 'paul', 'george', 'ringo'] >>> p = Paginator(objects, 2) >

Django学习系列之中间件

中间件的定义 中间件是一个.一个的管道,如果相对任何所有的通过Django的请求进行管理都需要自定义中间件 中间件可以对进来的请求和出去的请求进行控制 中间件是一类 django请求生命周期 自定义中间件 process_request(self,request): 请求到达之后之后先执行这个中间件 process_view(self, request, callback, callback_args, callback_kwargs): process_exception(self, requ

Django - Ajax分页

目前总结了2种方法: 1. Ajax 分页 尼玛各种google,stackoverflow,搞了好久才总结出这个,之前使用Pagination tag loading的方式不好用,并且不能进行ajax提交请求的页面无刷新的方式去分页 1.view.py 1 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 2 from django.shortcuts import render 3 def xxx