【问题标题】:Django Ajax/Jquery Refreshing DIV elements on TimerDjango Ajax/Jquery 在 Timer 上刷新 DIV 元素
【发布时间】:2015-01-18 23:08:42
【问题描述】:

我有一个 Django 项目,我正在尝试在其上实现 ajax。这个想法是在数据库中有一个警报列表(每 5 秒左右外部更新一次)。

由于数据库是自动更新的,我想要实现的是一个页面元素,它每 10 秒左右刷新一次以显示新信息(而不是刷新整个页面)。这已经适用于页面刷新或元刷新(eww ..)

这是我到目前为止开始的内容,我参考了以下 Stackoverflow 问题,我曾经尝试帮助我。

Refresh a div to shows new rating in Django using JQuery and AJAX

Refresh a div in Django using JQuery and AJAX

我这几天一直在兜圈子,没有任何进展,非常感谢任何帮助。

index.html

<div id="right">
{% include 'alarmviewer/alarms.html' %}
</div>

alarms.html

Theres alot more in this one, but I didn't include it as it didn't seem necessary. It works without the ajax.
<div class="alarmsheader">.....</div>

urls.py

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^alarms/$', views.alarms, name='alarms'),
)

views.py

def alarms(request):
latest_alarm_list = ActiveAlarmsSimple.objects.order_by('severity')[:1000]
active_alarm_list = ActiveAlarmsCount.objects.order_by('-active_alarms')[:1]
return render_to_response('alarmviewer/alarms.html', {'latest_alarm_list':     latest_alarm_list,'active_alarm_list': active_alarm_list,})

script.js

function refresh() {
  $.ajax({
  url: "{% url 'alarmviewer:alarms' %}",
  success: function(data) {
    $('#right').html(data);
  }
 });
};


$(document).ready(function ($) {
  refresh();
  var int = setInterval("refresh()", 3000);

只是一个注释。在没有实现 ajax 的情况下,这一切都可以正常工作。手动或使用元标记每 5 秒刷新一次页面。我只是在运行服务器时收到错误

[2015 年 1 月 19 日 11:38:22]“GET /alarmviewer/%7B%%20url%20%27alarmviewer:logical%27%20%%7D HTTP/1.1”404 2936

我认为这意味着我的views.py 或我的Urls.py 有问题,因为它似乎无法找到它应该刷新的alarms.html 页面。

感谢您的帮助!

【问题讨论】:

  • 将“alarms/$”直接放入javascript会发生什么?
  • 你为什么使用“{% url 'alarmviewer:alarms' %}”而不是“{% url 'alarms' %}”?
  • ReferenceError: 未定义警报
  • 你的应用里面有那个url文件吗?
  • 我之前曾尝试过,结果相同。会再试一次

标签: jquery python ajax django


【解决方案1】:

使用 Django 渲染 HTML 文档时,您将需要在 HTML 文档的某个位置,而不是在 js 文件中。

尝试在 HTML 模板中包含 &lt;script&gt;Your script here&lt;/script&gt; 之间的 javascript 或在 HTML 模板中定义一个全局变量:

<script> var ALARM_URL = "{% url 'alarmviewer:alarms' %}"; </script>

然后将您的 ajax 调用 url 更改为 url: ALARM_URL。希望这会有所帮助。

【讨论】:

  • 感谢您的建议!现在是 HTTP:500 错误,而不是更好的 404。认为我的 Urls.py 或 Views.py 肯定与我需要调查的事情有关。
  • 你需要缩进你的alarms()函数中的行。我还建议您设置DEBUG = TRUE,以便在您的浏览器中获得更详细的响应;你也可以到你项目的根目录调用python manage.py shell来检查警报视图是否有效。
  • 糟糕,没有收到,抱歉。如果您在您的views.py 中导入from django.shortcuts import render 然后使用您的初始版本,您可以节省一些工作,但是将render_to_response() 替换为`render(request, 'alarmviewer/alarms.html', {yourdict})
  • 所以我用 HttpResponse 替换了 'render_to_response'(见 pastebin.com/uXxNzMFP)。渲染更有利吗?谢谢。
  • 另外,我实际上会将您的答案标记为正确,因为这对我来说是一个重大突破。
【解决方案2】:

全部固定。非常感谢 Ahmed 和 SirTobi 的帮助!

最初的问题是页面在尝试更新时出现 404 错误。 SirTobi 的解决方案改为使用 HTTP:500'ing(这实际上是一个好兆头!)

然后需要将 views.py 更改为我在此 pastebin http://pastebin.com/uXxNzMFP 中概述的不同格式

希望这可以帮助遇到类似问题的其他人

【讨论】:

  • return render_to_response('alarmviewer/alarms.html', {'latest_alarm_list': latest_alarm_list,'active_alarm_list':active_alarm_list,}),节省一些时间,并在视图开头创建字典,然后添加您要添加​​到其中的所有列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 2014-09-25
相关资源
最近更新 更多