django - 基于功能的视图中的分页显示所有对象
问题描述
我有基于功能的视图,我的分页无法正常工作。我在一个页面中看到所有对象,这是一个问题,但页码显示正确,这是一件好事。
我的views.py 看起来像这样:
def myview(request):
qs = A.objects.prefetch_related(Prefecth('something', something, something))
paginator = Paginator(qs, 200)
page = request.GET.get('page')
page_obj = paginator.get_page(page)
context = {'qs': qs, 'page_obj': page_obj}
return render(request, 'mytemplate.html', context)
下面是 mytemplate.html 片段。我确实使用了django 文档中的这个例子
{% for q in qs %}
<tr>
<td>{{ q.name }}</td>
<td>{{ q.phone }}</td>
<td>{{ q.blah }}</td>
</tr>
{% 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 }} of {{ page_obj.paginator.num_pages }}
</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>
我希望有人可以对此有所了解。提前致谢。
解决方案
您需要遍历page_obj
(Page
对象),而不是查询集:
{% for q in page_obj %}
<tr>
<td>{{ q.name }}</td>
<td>{{ q.phone }}</td>
<td>{{ q.blah }}</td>
</tr>
{% endfor %}
在 DjangoQuerySet
中(或多或少)是不可变的,这意味着分页不会改变查询集本身。该Page
对象生成根据页面切片的查询集的修改版本。通过遍历页面对象,您可以遍历修改后的查询集。
推荐阅读
- swift - 如何使用 urlsession 在手表操作系统上执行 http 请求
- python - Groupby 连续值和聚合
- arrays - 如何使用Ruby中的数组方法将字符串数组转换为带有牛津逗号的列表
- php - 如何从方形目录 API 返回对象中提取特定字段?
- javascript - 如何根据可变左百分比对齐文本
- swift - 我怎么知道我的“forKey”用户默认键名是什么
- python - 我需要为此获得连续输入,但是当我使用 while 循环时,它会中断
- c++ - 限制数组类型的大小,虽然还没有实例
- bash - 我怎样才能得到 whoami 因为它会存在 *before* sudo 到变量中?
- datastage - 修剪前导和尾随空格而不使用数据阶段中的转换阶段