ListView 中的分页控件
在模板中添加上一页和下一页链接
ListView 中的分页控件 是 CoddyKit 上的免费 Django Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Django Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Django Academy 课程共包含 4 节课。
本课时的部分内容尚未翻译,以英文显示。
Pagination Built In
Good news: ListView can paginate for you. You barely write any code, and Django handles slicing the queryset into pages automatically. 🚀
Set paginate_by
Just add one attribute. Setting paginate_by tells the ListView how many items each page should show.
class ArticleList(ListView):
model = Article
paginate_by = 10The page_obj Variable
With pagination on, your template receives a page_obj. It is the same Page object you met before, ready to loop and inspect.
Looping the Current Page
In the template, iterate page_obj to show only this page's items. Django already sliced the queryset for you.
{% for article in page_obj %}
{{ article.title }}
{% endfor %}Reading the Page Number
ListView pulls the page number from the ?page= query string in the URL, so a link to ?page=2 shows the second page.
Show a Previous Link
Guard the back link with has_previous so it only appears when there really is an earlier page to visit.
{% if page_obj.has_previous %}
Prev
{% endif %}Link to the Previous Page
Inside that block, build the href using previous_page_number so the link points one page back.
<a href="?page={{ page_obj.previous_page_number }}">Prev</a>Show a Next Link
Mirror the logic for forward navigation. Wrap the next link in a has_next check so it hides on the final page.
{% if page_obj.has_next %}
Next
{% endif %}Display Page X of Y
Reassure users with a counter. Combine number and the paginator's num_pages to print "Page 2 of 5".
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}Custom Context Name
Prefer a friendlier loop variable? Set context_object_name and Django names the page list whatever you choose.
context_object_name = 'articles'Putting It Together
One attribute plus a small template block gives you full page controls: prev, next, and a position counter, with no view logic to write.
Quick Check
Your ListView template needs the current page's items.
Recap
You enabled pagination with paginate_by, looped page_obj, and built prev/next links guarded by has_previous and has_next. Clean lists, zero view code. 🎉
常见问题解答
「ListView 中的分页控件」课时是免费的吗?
是的 — 「ListView 中的分页控件」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Django Academy 课程的其余内容,请升级到 CoddyKit PRO。 Django Academy 课程共包含 4 节课。
「ListView 中的分页控件」这节课中我会学到什么?
在模板中添加上一页和下一页链接 你通过在浏览器中直接运行的动手代码来练习 Django Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Django Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Django Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「ListView 中的分页控件」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Django Academy 课中编写并运行代码吗?
能。每节 Django Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Paginator 类
- ListView 中的分页控件
- 编写 TestCase 与断言
- 测试客户端与装置