在 Paginator Django 中设置默认起始页

Set default start page in Paginator Django

我有一个项目列表。当我输入其中一个的详细信息时,我想使用下一页检查其他人。

我遇到的问题是无论我点击哪个都不重要我总是从第一页开始(第一个项目)

Paginator的文档class我在django docs中找到的文档很少,我想找到指示显示哪个页面的方法,例如。如果我单击 id=3 的对象,我应该看到 .

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的元素,如果不是,我们return .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 = <b>paginator.get_page(id)</b>

    return render(
        request,
        'portfolio/projects/detail.html',
        'project': project}
    )

话虽这么说,但我并不完全清楚你为什么要这样做。不能保证具有 pk=5 的对象是 fifth 元素。如果删除元素,主键之间可能会有“间隙”。

如果要获取该元素所在的页面,则应确定页面。你可以这样做:

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:
        <b>page</b> = Project.objects.filter(pk__lte=id).count()
        project = paginator.get_page(<b>page</b>)

    return render(
        request,
        'portfolio/projects/detail.html',
        'project': project}
    )