我是Django开发的新手,想知道是否有可能在客户端触发网页刷新。
我的情况: 客户端正在浏览网页1。
我已将一些数据更新到数据库,并希望刷新view.py以从数据库中获取新数据,并刷新客户端网页以显示新信息。
我该如何实现?
谢谢。
最好的问候。
答案 0 :(得分:1)
有两种选择:
在页面上添加一个脚本,该脚本每隔几秒钟轮询一次服务器(ajax)以获取最新数据,并在适当位置刷新数据(不涉及页面刷新)。为此,您将在Django中创建一个视图,该视图以JSON格式返回数据,而您的JavaScript将替换HTML中的数据。 Pro:很棒的用户体验,页面仍然可用。缺点:不是立即开始的,您必须考虑可伸缩性,因为每个打开的页面都会不断轮询服务器,但是缓存响应应该很容易。
添加一个脚本,该脚本仅轮询是否应刷新页面。它将发送某种版本的令牌,以标识页面上的当前数据,并且您的Django视图可以告诉您是否需要刷新页面。然后脚本将仅调用location.reload()
来刷新页面。优点:无需获取数据,刷新状态可以轻松地缓存;缺点:仍然不是立即的,当用户可能不希望它时发生页面刷新。
使用网络套接字向服务器开放开放的永久连接,您可以通过该连接推送新数据(或仅发送事件:“请刷新”)。优点:最佳体验,立即更新,缺点:在旧的浏览器上不起作用,实现和部署都很复杂。 django-channels将是一个很好的入门者。
答案 1 :(得分:0)
location.reload()
在Django模板内部的HTML中就足够了。您是否需要在特定事件上触发?如果是这样,您将想找到一种触发location.reload()
的方法,在这种情况下,您将需要提供一些其他细节。但实际上,您只是需要一些JavaScript来监听事件以重新加载您的网页。如果您想获得高级,我会研究Django Channels。
答案 2 :(得分:-1)
在.html代码中尝试此操作。每分钟刷新页面
{% block content %}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
setTimeout(function(){
location.reload(true);
alert("The page will now refresh");
}, 60000);
});
</script>
{% endblock content %}