首页 > 解决方案 > 基于功能的视图中的分页显示所有对象

问题描述

我有基于功能的视图,我的分页无法正常工作。我在一个页面中看到所有对象,这是一个问题,但页码显示正确,这是一件好事。

我的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">&laquo; 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 &raquo;</a>
    {% endif %}
  </span>
</div>

我希望有人可以对此有所了解。提前致谢。

标签: djangopagination

解决方案


您需要遍历page_objPage对象),而不是查询集:

{% for q in page_obj %}
<tr>
  <td>{{ q.name }}</td>
  <td>{{ q.phone }}</td>
  <td>{{ q.blah }}</td>
</tr>
{% endfor %}

在 DjangoQuerySet中(或多或少)是不可变的,这意味着分页不会改变查询集本身。该Page对象生成根据页面切片的查询集的修改版本。通过遍历页面对象,您可以遍历修改后的查询集。


推荐阅读