如何使用过滤的查询集处理通用ListView分页?

时间:2018-05-09 18:07:01

标签: python django

代码:

class MyObjects(LoginRequiredMixin, ListView):
    model = AllObjects
    template_name = "my_objects.html"
    paginate_by = 10

    def get_queryset(self, *args, **kwargs):
        queryset = super(MyObjects, self).get_queryset()
        return queryset.filter(added_by=self.request.user).order_by('-last_modified')

我有一个视图,列出用户对表的添加。问题是分页不正常。我认为这是因为每次django渲染页面时,它都会再次过滤查询集,导致只列出前10个项目。可以做些什么来处理这个问题?或者我不应该使用通用视图来做这样的事情吗?

模板:

<table>
  {% for obj in object_list %}
  <tr>
    <td>
      {{ obj.name}}
    </td>
  </tr>
  {% endfor %}
</table>

<nav aria-label="Page navigation">
  <ul class="pagination">
    <li class="page-item {% if not page_obj.has_previous %}disabled{%endif%}">
      <a class="page-link" {% if page_obj.has_previous %} href="?sayfa={{ page_obj.previous_page_number }}" {% endif %} aria-label="Previous">
            <span aria-hidden="true">&laquo;</span>
          </a>
    </li>
    {% for page in page_obj.paginator.page_range %} {% if page == page_obj.number %}
    <li class="page-item active"><a class="page-link" href="#">{{ page }}</a></li>
    {% else %}
    <li class="page-item"><a class="page-link" href="?sayfa={{ page }}">{{ page }}</a></li>
    {% endif %} {% endfor %}
    <li class="page-item {% if not page_obj.has_next %}disabled{%endif%}">
      <a class="page-link" {% if page_obj.has_next %}href="?sayfa={{ page_obj.next_page_number }}" {% endif %} aria-label="Next">
            <span aria-hidden="true">&raquo;</span>
          </a>
    </li>
  </ul>
</nav>

1 个答案:

答案 0 :(得分:0)

我发现了自己的错误。在我的模板中,我使用了链接“?sayfa = {{page}}”。 (“sayfa”表示土耳其语中的页面,因此它是本地化版本)这是我之前使用基于功能的视图进行分页的剩余部分。一种解决方法是将所有“sayfa”更改为“page”,但由于这不适合本地化,因此在我的视图中添加page_kwarg = "sayfa"可以解决问题。谢谢你的答案!