大图像缩略图的Django分页

大图像缩略图的Django分页,django,pagination,Django,Pagination,我有几百个图像缩略图,每个15k。我想在每页上显示20个左右 django.core.paginator是否足以对这些页面进行分页?也就是说,它是否只返回当前页面上显示的图像?(如果没有,那么什么是一个好方法呢?)谢谢。取决于此,因为RDBMS有一个很大的限制(它影响所有数据库,包括MySQL、Postgres等) django.core.paginator接受一个表示任何类型的SQL查询的QuerySet,并添加一个LIMIT子句,以便仅从数据库中获取两个条目。这种方法适用于许多类型的应用程序

我有几百个图像缩略图,每个15k。我想在每页上显示20个左右


django.core.paginator
是否足以对这些页面进行分页?也就是说,它是否只返回当前页面上显示的图像?(如果没有,那么什么是一个好方法呢?)谢谢。

取决于此,因为RDBMS有一个很大的限制(它影响所有数据库,包括MySQL、Postgres等)

django.core.paginator
接受一个表示任何类型的SQL查询的
QuerySet
,并添加一个
LIMIT
子句,以便仅从数据库中获取两个条目。这种方法适用于许多类型的应用程序,但如果有很多条目,可能会成为一个严重的问题。特别的问题是,每当您访问第800页时,数据库实际上会获取801*20个条目,然后再次删除前800*20个条目以返回最后20个条目

不幸的是,没有简单的方法来解决这个问题。在很多情况下,一个next/prev按钮可能就足够了,这样您就可以编写自己的分页了,它在after键而不是页码上进行操作。例如,如果用户当前显示的最后一个条目具有键
“D”
,则显示一个下一步按钮,该按钮链接到
/next?after=D
,然后使用SQL查询,如
SELECT*FROM objects WHERE key>
D
ORDER by key LIMIT 20
。这种方法的优点是,您可以在
objects.key
上添加索引,从而显著加快速度

另一种方法需要在表中添加一个附加的索引(!)列
page_num
。然后,您可以从page_num=800 ORDER BY key的对象执行SQL查询,如
SELECT*。使用这种方法,您仍然可以随机访问所有页面,但必须维护page_num列。如果数据主要附加在末尾,那么这可能很容易,如果您希望高效地从中间删除/插入元素,那么这可能会更复杂

因此,我将从django.core.paginator开始,因为它大约只有一行代码。但是要注意分页视图的响应时间和数据库中的slowquery日志。如果您的数据库服务器无法再处理负载,则必须选择上述技术之一。如果需要随机页面访问,则选择解决方案2,否则选择解决方案1(因为它更简单)

PS:是的,
django.core.paginator
将正常工作。:)