E.D*_*iaz 7 python mysql database django pagination
关于Django的分页我有一个问题.当我尝试分页超过200k的记录时,门户网站加载速度非常慢(> 10秒),我想要使用大约200万条记录.
我无法在Stackoverflow或其他网站上找到针对此问题的GOOD特定修复程序.每当代码获取一个页面时,它就会执行QuerySet,它会遍历一个非常大的数据集,使其变慢.
谁知道可以做些什么?我到处搜索,无法解决这个问题.下面我将代码发布到paginate.Paper_list是:model.object.all().filter(category = x)(现在有大约200k个对象(它们都属于该类别).
def paginate_context(paper_list, request, context, source, author, title, term, date):
num_papers = len(paper_list)
paginator = Paginator(paper_list, 4) # Show X papers per page
page = request.GET.get('page')
try:
papers = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
papers = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
papers = paginator.page(paginator.num_pages)
context['papers'] = papers
context['num_papers'] = num_papers
context['query_cat'] = create_request_str_and(context['cat'], source, author, title, term, date)
Run Code Online (Sandbox Code Playgroud)
正如我在代码中看到的,num_papers = len(paper_list)
方法评估查询,因此可能会影响性能。您可以将其更改为:
num_papers = paper_list.count()
Run Code Online (Sandbox Code Playgroud)
您可以在此处检查有关何时评估查询集的信息:https://docs.djangoproject.com/en/1.9/ref/models/querysets/#when-querysets-are-evaluated