问题描述
我在这里有点困惑...
我在我的班级中分配了 paginate_by 但它根本不分页。 {% if is_paginated %}
返回 False。
我已经阅读了很多关于 query_set 和其他文章的文章,但似乎没有什么能解决我的问题。
这是我的原始观点:
class Clients(ListView):
paginate_by = 5
model = Client
template_name = 'clients.html'
def get_clients_view(self,request):
"""
Primary View
"""
last_name = request.GET.get('last_name','')
email = request.GET.get('email','')
if request.method == 'GET':
object_list = Client.objects.filter(last_name__contains=last_name).filter(email__contains=email)
register_form = ClientRegisterForm(request.POST)
remove_form = ClientRemoveForm(request.POST)
search_form = ClientSearchForm(request.GET)
update_form = ClientUpdateForm(request.POST)
client_context= {
'object_list' : object_list,'register_form' : register_form,'remove_form' : remove_form,'search_form' : search_form,'update_form' : update_form
}
return render(request,template_name='clients.html',context=client_context)
以及我的导航:
<nav class="step-links">
{% if is_paginated %}
{% if page_obj.has_prevIoUs %}
<a href="?page=1">« first</a>
<a href="?page={{ page_obj.prevIoUs_page_number }}">prevIoUs</a>
{% endif %}
{% if page_obj.number %}
<p class="current">
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
</p>
{% endif %}
{% 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 %}
{% else %}
<p> Is not paginated.</p>
{% endif %}
</nav>
解决方法
找出问题所在。使用分页器 API 时,需要将 page_obj 作为上下文变量传递,而无需标准 object_list。
如果 object_list 在上下文字典中与 page_obj 一起传递,则 object_list 会覆盖 page_obj 处理程序。
client_context= {
#'object_list' : object_list,'register_form' : register_form,'remove_form' : remove_form,'search_form' : search_form,'update_form' : update_form,'page_obj' : page_obj
}
在注释掉 object_list 并传递 page_obj 之后,它就可以从 html 模板访问了。