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_previous和has_next显示导航。
取决于你要做怎么样的分页。如果是做成表格的分页,django tables2( https://github.com/bradleyayers/django-tables2)有不错的实现
from django.core.paginator import Paginator

