首页 > 解决方案 > 在 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)

如果它是可能的,但真诚地不知道如何。

标签: djangopaginator

解决方案


您可以检查是否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}
    )

推荐阅读