8.分页器
分页器
1.视图函数
def paginator(request):
a = Books.objects.all().order_by("pk")
paginator1 = Paginator(a, 3)
print("数据总数:", paginator1.count)
print("总页数:", paginator1.num_pages)
print("页码列表:", paginator1.page_range)
page1 = paginator1.page(1)
print("下一页数:", page1.next_page_number())
print("下一页", page1.has_next())
page2 = paginator1.page(2)
print("上一页数:", page2.previous_page_number())
print("上一页:", page2.has_previous())
# 抛错
# page=paginator.page(12) # error:EmptyPage
# page=paginator.page("z") # error:PageNotAnInteger
current_page_num = int(request.GET.get("page", 1))
try:
current_page = paginator1.page(current_page_num)
print("object_list", current_page.object_list)
except EmptyPage as e:
current_page = paginator1.page(1)
except PageNotAnInteger as e:
current_page = paginator1.page(paginator1.count)
# 需求:总页数54,使其永远只显示11页
if paginator1.num_pages > 11:
if current_page_num - 5 < 1:
page_range = range(1, 12)
elif current_page_num + 5 > paginator1.num_pages:
page_range = range(paginator1.num_pages - 10, paginator1.num_pages + 1)
else:
page_range = range(current_page_num - 5, current_page_num + 6)
else:
page_range = paginator1.page_range
dict1 = {
"page_range": page_range,
"current_page_num": current_page_num,
"current_page": current_page,
}
return render(request, "paginator.html", dict1)
2.html代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>paginator</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/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 page_range %}
{% if current_page_num == item %}
<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>
问题1
在需要进行查询的语句中增加order_by排序
return SKU.objects.filter(category_id=category_id).order_by()
问题2
Jinja2在调用对象的方法时不同于调用Django模板引擎对象的方法,Jinja2的方法于python函数调用方法一致需要加括号
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix