[英]how to update a Django page without a page reload?
我的 Django 应用程序显示来自数据库的数据。 该数据无需用户干预即可更改,即在幕后。 每当它发生变化时,我希望网页更新更改的部分,而无需重新加载整页。
显然 AJAX 浮现在脑海中。 当页面最初加载(或手动,稍后完全重新加载)时,呈现的模板会加载运行 window.onload = update("all"), update(...) 的 JavaScript,进而触发许多 XMLHTTPRequests它再次返回被转换为相应部分的 HTML 片段的数据。 一切正常。 在初始页面加载时。
现在我发现自己处于一个将新对象保存到数据库的 Python 函数中。
如何告诉浏览器运行 update(...) ?
我是否需要以某种方式手动向映射到视图的 url 发出请求,该视图又会呈现一个包含 JavaScript 代码的模板来运行 update(...) ??? 天啊!
我觉得我没有遵循通常的方法。 也许我只是站在问题面前。
谁能帮我 ?
2021 更新:使用频道: https : //channels.readthedocs.io/en/latest/
你有两个选择
这是一篇关于Django 中彗星的文章
两种方法:
只需更新数据库并等待下一个 AJAX 查询。 这意味着它应该定期执行查询,您必须在即时性和服务器负载之间取得平衡。 如果您可以做一个廉价的查询来验证是否有更新,它会有所帮助。 也许让检查只依赖于 memcached 而不是去数据库
使用彗星。 简而言之:客户端执行 AJAX 查询请求更新。 服务器看到没有更新,所以它不回答。 相反,连接会长时间保持打开状态。 最终要么更新来了,服务器最终回答,要么客户端超时并终止连接。 在这种情况下,客户端应立即重新发出查询以继续等待更新。
您还可以使用 Websocket APIhttps://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API 。 使用此 API,您可以向服务器发送消息并接收事件驱动的响应,而无需轮询服务器以获取回复。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.