gpt4 book ai didi

python - 如何在 Django 中基于类的分页 View 中迭代当前页面中的对象?

转载 作者:太空宇宙 更新时间:2023-11-04 00:59:03 24 4
gpt4 key购买 nike

我有一个关于 Django 基于类的 View 方法 get_context_data() 的快速逻辑问题。

假设我有一个基于分页 类的 ListView。每页显示 20 个对象,整个查询集中有 200 个对象。

我的问题是:

如何 context["object_list"] 中属于当前页面 的那些对象?

最佳答案

使用基于类的 View 时非常简单。

views.py中:

from django.views.generic import ListView


class YourPaginatedListView(ListView):
...
paginate_by = 20

在你的模板中,这个的一些版本:

 {% if is_paginated %}
<nav>
<ul>

<li>
<a href="{% if page_obj.has_previous %}?page=1{% endif %}">
First Page
</a>
</li>

<li>
<a href="{% if page_obj.has_previous %}?page={{ page_obj.previous_page_number }}{% endif %}">
Previous Page
</a>
</li>

<li>
<a>{{ page_obj.number }} / {{ page_obj.paginator.num_pages }}</a>
</li>

<li>
<a href="{% if page_obj.has_next %}?page={{ page_obj.next_page_number }}{% endif %}">
Next Page
</a>
</li>

<li>
<a href="{% if page_obj.has_next %}?page={{ page_obj.paginator.num_pages }}{% endif %}">
Last Page
</a>
</li>

</ul>
</nav>
{% endif %}

如果您没有使用 CBV,请查看 Using Paginator in a view 的文档.

更新:

由于您正在处理对象列表,因此在您的 View 中尝试这样的操作以仅处理当前页面上的对象:

from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator

from .models import YourModel


class YourPaginatedListView(ListView):
...
paginate_by = 20

def get_context_data(self, **kwargs):

context = super(YourPaginatedListView, self).get_context_data(**kwargs)
object_list = YourModel.objects.all()

paginator = Paginator(object_list, self.paginate_by)
page = self.request.GET.get('page')

try:
current_objects = paginator.page(page)
except PageNotAnInteger:
current_objects = paginator.page(1)
except EmptyPage:
current_objects = paginator.page(paginator.num_pages)

# Process the objects on the current page here

context['object_list'] = current_objects
return context

关于python - 如何在 Django 中基于类的分页 View 中迭代当前页面中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33686535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com