【问题标题】:How does django's pagination work in a django view [duplicate]django的分页如何在django视图中工作[重复]
【发布时间】:2015-10-04 08:28:20
【问题描述】:

所以我正在阅读关于分页的内容,我已经写了很多次这个应用程序,但我想知道 django 中的分页是如何在 sql 级别工作的。

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

def listing(request):
    contact_list = Contacts.objects.all()
    paginator = Paginator(contact_list, 25) # Show 25 contacts per page

    page = request.GET.get('page')
    try:
        contacts = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        contacts = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of     results.
        contacts = paginator.page(paginator.num_pages)

    return render_to_response('list.html', {"contacts": contacts})

Contacts.objects.all() 每次我点击视图时都会被调用吗? 还是Paginator 以某种方式保持状态? paginator = Paginator(contact_list, 25) 的 sql 查询会是什么样子?是否在幕后使用了生成器并且事情被延迟评估?

对不起,如果这是一个愚蠢的问题,Django 中有很多抽象,我似乎错过了背后的所有动作。 提前致谢

【问题讨论】:

  • 分页器不会在请求之间维护服务器上的状态——为每个请求实例化一个新的分页器。我认为我链接到的重复问题可以回答您的其余问题。

标签: python sql django pagination lazy-evaluation


【解决方案1】:

我将这个重复的链接作为答案发布,因为您的问题的标题非常易读,并且您的所有问题都有答案

Django lazy QuerySet and pagination

【讨论】:

    猜你喜欢
    • 2020-06-18
    • 2015-09-07
    • 2013-12-25
    • 2019-02-07
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多