Python中Django内容页分页显示如何实现?

null
Python中Django内容页分页显示如何实现?

3 回复

在Django里做内容分页,直接用Paginator类就行,贼简单。给你个完整例子:

# views.py
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.shortcuts import render
from .models import Article

def article_list(request):
    # 获取所有文章
    article_list = Article.objects.all()
    
    # 每页显示10条
    paginator = Paginator(article_list, 10)
    
    # 从GET参数获取当前页码
    page = request.GET.get('page')
    
    try:
        # 获取当前页的数据
        articles = paginator.page(page)
    except PageNotAnInteger:
        # 如果page不是整数,显示第一页
        articles = paginator.page(1)
    except EmptyPage:
        # 如果page超出范围,显示最后一页
        articles = paginator.page(paginator.num_pages)
    
    return render(request, 'articles/list.html', {'articles': articles})

模板里这么写:

<!-- list.html -->
{% for article in articles %}
    <div class="article">
        <h2>{{ article.title }}</h2>
        <p>{{ article.content|truncatewords:50 }}</p>
    </div>
{% endfor %}

<!-- 分页导航 -->
<div class="pagination">
    {% if articles.has_previous %}
        <a href="?page=1">首页</a>
        <a href="?page={{ articles.previous_page_number }}">上一页</a>
    {% endif %}
    
    <span>第 {{ articles.number }} 页 / 共 {{ articles.paginator.num_pages }} 页</span>
    
    {% if articles.has_next %}
        <a href="?page={{ articles.next_page_number }}">下一页</a>
        <a href="?page={{ articles.paginator.num_pages }}">尾页</a>
    {% endif %}
</div>

核心就三步:用Paginator分页数据,处理页码异常,在模板里判断前后页。分页样式自己用CSS调就行。

一句话总结:用Django内置的Paginator分页,模板里判断has_previoushas_next显示导航。


取决于你要做怎么样的分页。如果是做成表格的分页,django tables2( https://github.com/bradleyayers/django-tables2)有不错的实现

from django.core.paginator import Paginator

回到顶部