django - 在 Paginator Django 中设置默认起始页
问题描述
我有一个项目清单。当我输入其中一个的详细信息时,我想使用下一页检查其他人。
我遇到的问题是我点击哪个并不重要我总是从第一页开始(第一个项目)
我在 django docs 中找到的 Paginator 类的文档非常小,我想找到指示显示哪个页面的方法,例如。如果我单击 id=3 的对象,我应该会看到 <Page 3 of 8>。
def project_detail(request, id):
projects = Project.objects.all()
paginator = Paginator(projects, 1)
page = request.GET.get('page')
project = paginator.get_page(page)
return render(request,
'portfolio/projects/detail.html',
'project': project})
我想在里面实现这部分代码:
paginator.page(id)
如果它是可能的,但真诚地不知道如何。
解决方案
您可以检查是否page
是 的元素request.GET
,如果不是,我们返回.get_page(id)
:
def project_detail(request, id):
projects = Project.objects.all()
paginator = Paginator(projects, 1)
if 'page' in request.GET:
project = paginator.get_page(request.GET['page'])
else:
project = paginator.get_page(id)
return render(
request,
'portfolio/projects/detail.html',
'project': project}
)
话虽如此,我并不完全清楚你为什么要这样做。例如,不能保证pk=5的对象是第五个元素。如果删除元素,则主键之间可能存在“间隙”。
如果要获取该元素所在的页面,则应确定该页面。你可以这样做:
def project_detail(request, id):
projects = Project.objects.order_by('pk')
paginator = Paginator(projects, 1)
if 'page' in request.GET:
project = paginator.get_page(request.GET['page'])
else:
page = Project.objects.filter(pk__lte=id).count()
project = paginator.get_page(page)
return render(
request,
'portfolio/projects/detail.html',
'project': project}
)