Django ListView 分页
时间: 2023-07-14 09:57:50 浏览: 92
在 Django 中,ListView 是一个通用视图类,用于显示包含多个对象的列表视图。要实现分页功能,可以结合 Django 的内置分页类Paginator和ListView来完成。
首先,导入相关的模块:
```python
from django.core.paginator import Paginator
from django.views.generic import ListView
```
然后,定义你的 ListView 类,并设置需要显示的模型和模板:
```python
class YourListView(ListView):
model = YourModel
template_name = 'your_template.html'
paginate_by = 10 # 每页显示的对象数量
queryset = YourModel.objects.all() # 可以自定义查询集
```
在上述代码中,`YourListView` 继承自 `ListView`,并设置了 `model` 属性为你要显示的模型,`template_name` 属性为你的模板路径。`paginate_by` 属性用于设置每页显示的对象数量,这里设置为10。
接下来,在你的模板文件 `your_template.html` 中,可以通过以下方式渲染分页导航和对象列表:
```html
{% for object in object_list %}
<!-- 显示你的对象属性 -->
{% endfor %}
<!-- 显示分页导航 -->
<div class="pagination">
<span class="step-links">
{% if page_obj.has_previous %}
<a href="?page=1">« first</a>
<a href="?page={{ page_obj.previous_page_number }}">previous</a>
{% endif %}
<span class="current-page">{{ page_obj.number }}</span>
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}">next</a>
<a href="?page={{ page_obj.paginator.num_pages }}">last »</a>
{% endif %}
</span>
</div>
```
在模板中,你可以使用 `object_list` 来访问当前页的对象列表,`page_obj` 包含与分页相关的信息,例如当前页码、是否有上一页/下一页等。
这样,你就可以在 Django 中使用 ListView 和 Paginator 来实现分页功能了。
阅读全文