Python 如何使用过滤查询集处理通用ListView分页?
代码: 我有一个视图,其中列出了用户添加到表中的内容。问题是分页工作不正常。我认为这是因为每次django呈现页面时,它都会再次过滤queryset,导致只列出前10项。如何处理这个问题?或者我不应该使用通用视图来做这样的事情 模板:Python 如何使用过滤查询集处理通用ListView分页?,python,django,Python,Django,代码: 我有一个视图,其中列出了用户添加到表中的内容。问题是分页工作不正常。我认为这是因为每次django呈现页面时,它都会再次过滤queryset,导致只列出前10项。如何处理这个问题?或者我不应该使用通用视图来做这样的事情 模板: class MyObjects(LoginRequiredMixin, ListView): model = AllObjects template_name = "my_objects.html" paginate_by = 10
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')
{对象_列表%中的对象为%j}
{{obj.name}
{%endfor%}
-
{page_obj.paginator.page_range%}{%if page==page_obj.number%}
{%else%}
{%endif%}{%endfor%}
-
我发现了我的错误。在我的模板中,我使用了链接“?sayfa={{page}”。(“sayfa”在土耳其语中的意思是页面,所以它是本地化版本)这是我以前使用基于函数的视图进行分页时留下的。一种修复方法是将所有“sayfa”更改为“page”,但由于这对于本地化目的来说并不太好,因此在我的视图中添加page\u kwarg=“sayfa”
可以修复此问题。谢谢你的回答 如果要列出更多项目,请将paginate_增加
,如果要在模板中看到其他项目,则必须从一个页面切换到另一个页面。筛选功能不会影响Django的分页能力。分页是在调用get_queryset()
方法后应用的,方法为。因此,您的MyObjects
view类看起来应该可以工作。你能给我们看一下模板吗?我添加了模板。如果筛选器没有影响任何内容,那么问题一定在模板中?您的分页对象是object\u list
notpage\u obj
<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">«</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">»</span>
</a>
</li>
</ul>
</nav>