分页功能

2018-10-19  本文已影响0人  叶田的学习笔记

views.py

from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from .models import ArticlePost

from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger

@login_required(login_url='/account/login/')
def article_list(request):
    articles_list = ArticlePost.objects.filter(author=request.user)  
    paginator = Paginator(articles_list,4)    # 创建分页实例对象,规定每页最多2个
    page = request.GET.get('page')    # 获得当前浏览器GET请求的参数page的值,也就是当前浏览器所请求的页码数值,该参数必须是大于或等于1的整数
    try:
        current_page = paginator.page(page)  # 得到指定页面内容,page()是Paginator对象的一个方法
        articles = current_page.object_list    # 得到该页所有的对象列表,object_list是Page对象的属性
    except PageNotAnInteger:     # 异常:请求的页码数值不是整数
        current_page = paginator.page(1)
        articles = current_page.object_list
    except EmptyPage:    # 异常:请求的页码数值为空或者URL参数中没有page       
        current_page = paginator.page(paginator.num_pages)   # paginator.num_pages返回的是页数,num_pages是Paginator对象的一个属性
        articles = current_page.object_list

    return render(request,'article/column/article_list.html', {'articles': articles, 'page': current_page})

如果请求的页数不是整数,返回第一页。
如果请求的页数不在合法的页数范围内,返回结果的最后一页。

paginator.html

<div class="pagination">
    <span class="step-links">
        {% if page.has_previous %}    
        <a href="?page={{ page.previous_page_number }}">Previous</a>   #注意链接写法
        {% endif %}
        <span class="current">
        Page {{ page.number }} of {{ page.paginator.num_pages }}
        </span>
        {% if page.has_next %}
        <a href="?page={{ page.next_page_number }}">Next</a>
        {% endif %}
    </span>
</div>

number:返回当前页的页码

article_list.html

在适当位置插入paginator.html

{% include "paginator.html" %}
上一篇 下一篇

猜你喜欢

热点阅读