【问题标题】:Set default start page in Paginator Django在 Paginator Django 中设置默认起始页
【发布时间】:2020-11-27 18:59:36
【问题描述】:

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

我的问题是我点击哪个并不重要我总是从第一页开始(第一个项目)

我在 django docs 中找到的 Paginator 类的文档非常小,我想找到指示显示哪个页面的方法,例如。如果我点击 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)

如果有可能,但真心不知道怎么做。

【问题讨论】:

    标签: django paginator


    【解决方案1】:

    你可以检查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}
        )

    【讨论】:

    • 你的权利第二个解决方案要好得多。非常感谢!
    猜你喜欢
    • 2018-05-07
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    相关资源
    最近更新 更多