0

我正在尝试在我的网页中使用分页。所以我在 这里的 django 文档中找到了一个示例。

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

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

    # Make sure page request is an int. If not, deliver first page.
    try:
        page = int(request.GET.get('page', '1'))
    except ValueError:
        page = 1

    # If page request (9999) is out of range, deliver last page of results.
    try:
        contacts = paginator.page(page)
    except (EmptyPage, InvalidPage):
        contacts = paginator.page(paginator.num_pages)

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

示例中的问题是他一次加载所有项目以进行分页。但是在我的数据库中有20000条目并且它们都不能一次加载。那么,有没有办法优化查询呢?

4

2 回答 2

2

如果它确实一次将所有对象加载到内存中,那么它就是一个错误。只要您在将QuerySets 提供给 s 之前不将它们显式转换为列表Paginator,分页器只会获取与 using 一个查询匹配的行数,QuerySet然后QuerySet适当地限制仅获取要显示的那些行。

如果您真的怀疑它正在加载所有对象,要验证这一点,请使用django-debug-toolbar并查看已执行的查询。如果它确实加载了所有内容,那么请在 Django 的 trac 中提交一个错误。

于 2012-05-09T08:32:17.940 回答
1

DEBUG在 settings.py中设置False,这将显着提高您的性能。调试模式(除其他外)会打开 SQL 缓存,这会大大减慢速度。

于 2012-05-09T11:13:35.547 回答