有没有一种方法可以在填充查询时在 Django 模板中呈现大型查询集?
Is there a way to render large querysets in Django templates as the query is populated?
我有一个相当大的查询集和一个非常慢的服务器。当我呈现我的模板时,我注意到页面仅在填充查询集后呈现。为了提高页面加载速度,我想也许我的页面可以在过滤查询集时动态呈现查询集,但我不确定 Django 中是否有这样的实现。我的查询集有 1000 多个项目,每个项目大约有 20 个属性,我需要在页面上显示所有这些项目。我试着玩弄我的 Handsontable 渲染,但我发现花费的时间实际上是 运行 查询集过滤器而不是 handsontable 渲染。
如果有人能帮我指明正确的方向,将不胜感激
欢迎来到 Stack Overflow @commish :)
为了理清一些基础知识,当您说“即时”时,您可能会想到像 youtube 这样不断向您传输视频的内容。
这不是 Django 处理请求和响应的方式。
实际情况是这样的:
- 网页点击url(例子:localhost:8000/list/)
- django 视图函数接收到请求
- 它调用数据库并等待所有对象都已收到
- Django 使用查询集构建 html 响应
- Django 发回此响应
(不完全是这样,为了解释而简化)
如果你想减少第 3 步和第 4 步所用的时间,因为你的查询集很大,你最简单的选择是对你的请求进行“分页”。
因此,例如,不要将所有 1000 项发回,而是仅将第一页的 100 项发回。然后,当用户单击“加载更多”或转到 url 之类的 (localhost:8000/list/?page=2) 时,您将加载下一组 100 个项目,依此类推。
Django 有这方面的文档,详细解释了这个概念:https://docs.djangoproject.com/en/3.0/topics/pagination/
我有一个相当大的查询集和一个非常慢的服务器。当我呈现我的模板时,我注意到页面仅在填充查询集后呈现。为了提高页面加载速度,我想也许我的页面可以在过滤查询集时动态呈现查询集,但我不确定 Django 中是否有这样的实现。我的查询集有 1000 多个项目,每个项目大约有 20 个属性,我需要在页面上显示所有这些项目。我试着玩弄我的 Handsontable 渲染,但我发现花费的时间实际上是 运行 查询集过滤器而不是 handsontable 渲染。
如果有人能帮我指明正确的方向,将不胜感激
欢迎来到 Stack Overflow @commish :)
为了理清一些基础知识,当您说“即时”时,您可能会想到像 youtube 这样不断向您传输视频的内容。
这不是 Django 处理请求和响应的方式。
实际情况是这样的:
- 网页点击url(例子:localhost:8000/list/)
- django 视图函数接收到请求
- 它调用数据库并等待所有对象都已收到
- Django 使用查询集构建 html 响应
- Django 发回此响应
(不完全是这样,为了解释而简化)
如果你想减少第 3 步和第 4 步所用的时间,因为你的查询集很大,你最简单的选择是对你的请求进行“分页”。
因此,例如,不要将所有 1000 项发回,而是仅将第一页的 100 项发回。然后,当用户单击“加载更多”或转到 url 之类的 (localhost:8000/list/?page=2) 时,您将加载下一组 100 个项目,依此类推。
Django 有这方面的文档,详细解释了这个概念:https://docs.djangoproject.com/en/3.0/topics/pagination/