在django中执行代码作为定时事件

时间:2017-09-11 21:22:06

标签: javascript jquery django

我有一个留言板应用程序,需要收集和显示消息而无需任何用户输入或操作。我目前正在使用html元刷新标记刷新页面。我意识到这不是一个很好的解决方案。这是我想在不刷新页面的情况下经常运行的相关部分。

{% if grams_list %} #if there exists any messages for the user
  {% for g in grams_list %} #for each message
      <h2 class="gram-display">{{ g.message }}</h2> #display the message
  {% endfor %}
{% else %} #otherwise display this nice picture
  <h2 id="nograms" class="gram-display">No grams right now.</h2>
  <img id="bird" src="/static/cardinal_from_pixabay.jpg">
{% endif %}

这是用JavaScript完成的事情吗?我知道有可能让javascript每隔一段时间触发一次Javascript函数,但是这可能触发这个事件吗?或者,Django有一些内置函数可以做到这一点吗?它可以通过信号处理(我查看了信号,但并没有真正理解它们,尽管它们看起来有可能有用)。

2 个答案:

答案 0 :(得分:1)

Django信号无法做到这一点。看看jQuery.load()(http://api.jquery.com/load/),这可能是最简单的方法,它类似于你现在正在做的事情(你必须把模板作为一个单独的模板) URL /视图)。

答案 1 :(得分:0)

使用Websockets将数据从服务器推送到客户端非常简单。如果发生某种类型的事件并且您需要通知用户,则可以使用Websockets。

Django Channels project是使用Django的Websockets的一种方法。我也听说有人使用龙卷风。或者,您可以向Redis队列发送消息,并让Node.js脚本接收消息并将其广播给用户。所有这些都是可行的选择,但由于Channels是Django官方项目,它可能是最安全的选择。然后,您可以在客户端使用Javascript来执行任何必要的操作。

信号基本上是一种触发某些事件功能的方法,例如保存某个模型。它们不能直接播放到客户端,但可以用来调用此功能。基本上你可以使用信号通过Websockets向客户端发送消息。