【发布时间】:2018-05-12 22:20:09
【问题描述】:
首先,我是 Django 新手,对 AJAX 和 jQuery 完全不熟悉。 我正在本地开发。
所以我试图实现一个 HTML 表格,它在 AJAX 的帮助下每 X 秒动态刷新(不刷新页面),但我似乎无法让我的代码工作。我已经使用了这个问题中提供的示例:https://stackoverflow.com/a/34775420/6724882
(如果我有足够的代表,我会回答这个问题,或者通过聊天寻求帮助,但我还没有那种奢侈)
我已经尝试让它工作了 10 多个小时,但我开始感到无助。我一直在疯狂地搜索网络,但我被各种不同的方式弄得不知所措,而且每个问题和答案似乎都已经存在太多年了,或者与我的应用程序无关。
目前,该表在第一个查询中正常工作,它显示对象 Kala 与 rivinumero = 1(英文行号)。
所以,我有几个问题。
- 我应该将脚本包含在它自己的单独文件中,而不是包含在 HTML 文件(在我的例子中是 displaykala.html)。如果是这样,该文件应该是 在 static/js 文件夹中,还是在其他地方?
- 是否需要在某个地方单独包含 AJAX/JS 才能使脚本正常工作?
- 是我明显做错了什么,还是我提供的问题中的答案有误?
displaykala.html(与脚本在同一个文件中)
{% load static %}
{% include 'loginbar.html' %}
{% include 'nav.html' %}
<html>
<head>
<title>Display</title>
<link rel="stylesheet" type="text/css" href="{% get_static_prefix %}css/style.css">
</head>
<body>
<h1>Display</h1>
<table id="_appendHere" class="table table-striped table-condensed">
<tr>
<th>Id</th>
<th>Nimi</th>
<th>Latnimi</th>
</tr>
{% for kala in kalat %}
<tr>
<td>{{kala.rivinro}}</td>
<td>{{kala.tuote}}</td>
<td>{{kala.latinalainen_nimi}}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
<script>
var append_increment = 0;
setInterval(function() {
$.ajax({
type: "GET",
url: {% 'get_more_tables.html' %}, // URL to your view that serves new info
data: {'append_increment': append_increment}
})
.done(function(response) {
$('#_appendHere').append(response);
append_increment += 10;
});
}, 1000)
</script>
get_more_tables.html
{% load static %}
{% for kala in kalat %}
<tr>
<td>{{ kala.rivinro }}</td>
<td>{{ kala.tuote }}</td>
<td>{{ kala.latinalainen_nimi }}</td>
</tr>
{% endfor %}
views.py
from django.shortcuts import render
from adminside.models import Kala
from adminside.models import Liha
from django.contrib.auth.decorators import login_required
# Create your views here.
def index(request):
return HttpResponse("Index")
@login_required
def displaykala(request):
kalat = Kala.objects.filter(rivinro=1)
return render(request, 'displaykala.html', {'kalat': kalat})
@login_required
def get_more_tables(request):
increment = int(request.GET['increment'])
increment_to = increment + 10
kalat = Kala.objects.filter(rivinro=2)[increment:increment_to]
return render(request, 'get_more_tables.html', {'kalat': kalat})
urls.py(应用文件夹中的一个)
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^displayk$', views.displaykala, name='displayk'),
url(r'^get_more_tables', views.get_more_tables, name='get_more_tables'),
]
如果代码中有“是的,我试过这样做”这种愚蠢的实验,我很抱歉。
【问题讨论】:
-
抱歉,我不清楚实际出了什么问题。它更新一次然后停止,但您希望它每 10 秒附加一个新集合 - 对吗?
-
@DanielRoseman 是的,丹尼尔。我想要完成的是,代码将首先显示第一个对象,然后在 X 秒后,将下一个对象附加到表中。在这种情况下,首先是属性为 rivinro 的对象,值为 1(有效),然后是下一个值为 2 的对象(此时什么都没有发生)。
-
你确定这是真正的代码吗?
{% url 'get_more_tables.html' %}应该会导致 NoReverseMatch 错误,因为 URL 模式仅称为“get_more_tables”而没有 .html(应该如此)。 -
是的,你发现了其中一个“我试过这个东西”的实验。你是对的,它产生了那个错误。目前,它不会产生错误,看起来像这样: {% url 'get_more_tables' %} 。但是,更新仍然不起作用。
-
浏览器工具网络标签显示什么?是只发出一个请求,还是有重复的请求导致错误,还是什么?
标签: jquery python html ajax django