我正在django项目中尝试首次使用分页器。我在使其工作时遇到问题。当我运行它时,出现错误AttributeError:'Paginator'对象没有属性'get_page'。我已经试过了,但似乎无法解决。有人可以帮我吗?错误似乎是在“ babysitters = paginator.get_page(page)”行中
View.py文件
from django.shortcuts import render, get_object_or_404, get_list_or_404
from .models import Babysitter, Education, Reference, Work
from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator
from .choices import numbers_choices, minder_choices, county_choices
# Create your views here.
def all_babysitters(request):
babysitters = Babysitter.objects.all()
paginator = Paginator(babysitters, 3)
page = request.GET.get('page')
babysitters = paginator.get_page(page)
return render(request, "babysitters.html", {"babysitters": babysitters})
答案 0 :(得分:3)
.get_page方法是在Django 2.0中添加的,所以我想您使用的是旧版本,也许是Django 1.11。对于此版本,请使用paginator.page(page)
,但请注意,当发现无效/找不到页面时,这可能会引发InvalidPage
异常。
答案 1 :(得分:1)
除了使用Django-Rest-Framework之外,我还没有使用过Django,所以我将分享我的工作,希望您可以推断并用于常规Django。因此,以下是我构造分页响应的方法。
例如:
from django.core.paginator import Paginator
PAGE_SIZE = 20
def all_babysitters(request):
p = request.query_params.get("page", 1)
babysitters = Babysitter.objects.all()
paginator = Paginator(babysitters, PAGE_SIZE)
# page = paginator.page(p) # ~ Django 1.11
# The following line was added, see comments below for why
page = paginator.get_page(p) # Django 2.0 +
nextpage = page.next_page_number() if page.has_next() else None
data = BabySitterSerializer([i for i in page.object_list], many=True)
pages = {
"current": p,
"next": nextpage,
"total_pages": paginator.num_pages
"total_results": paginator.count
}
return {
"page_data": pages
"data": data
}
一个主要区别是使用序列化程序,我不知道是否需要常规Django,但是使用Django-Rest-Framework,您可以将查询结果返回到前端应用程序JSON格式。
希望有帮助:D
答案 2 :(得分:0)
这是我使用的工作代码。引用此blog
在views.py
from django.contrib.auth.models import User
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
def index(request):
user_list = User.objects.all()
page = request.GET.get('page', 1)
paginator = Paginator(user_list, 10)
try:
users = paginator.page(page)
except PageNotAnInteger:
users = paginator.page(1)
except EmptyPage:
users = paginator.page(paginator.num_pages)
return render(request, 'core/user_list.html', { 'users': users })
然后您只需将其处理为html模板
user_list.html
<table class="table table-bordered">
<thead>
<tr>
<th>Username</th>
<th>First name</th>
<th>Email</th>
</tr>
</thead>
<tbody>
{% for user in users %}
<tr>
<td>{{ user.username }}</td>
<td>{{ user.first_name }}</td>
<td>{{ user.email }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% if users.has_other_pages %}
<ul class="pagination">
{% if users.has_previous %}
<li><a href="?page={{ users.previous_page_number }}">«</a></li>
{% else %}
<li class="disabled"><span>«</span></li>
{% endif %}
{% for i in users.paginator.page_range %}
{% if users.number == i %}
<li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
{% else %}
<li><a href="?page={{ i }}">{{ i }}</a></li>
{% endif %}
{% endfor %}
{% if users.has_next %}
<li><a href="?page={{ users.next_page_number }}">»</a></li>
{% else %}
<li class="disabled"><span>»</span></li>
{% endif %}
</ul>
{% endif %}
我认为这对您会非常有帮助。