Jquery 使用AJAX刷新Django动态HTML表

Jquery 使用AJAX刷新Django动态HTML表,jquery,python,html,ajax,django,Jquery,Python,Html,Ajax,Django,首先,我是Django新手,对AJAX和jQuery几乎完全不熟悉我正在本地发展。 因此,我试图实现一个HTML表,在AJAX的帮助下每隔X秒动态刷新一次(没有页面刷新),但我似乎无法让代码正常工作。我已经使用了这个问题中提供的示例: (如果我有足够的代表,我会回答这个问题,或者从聊天室寻求帮助,但我还没有这样的奢侈) 我已经试着让它工作了10多个小时,我开始感到无助。我一直在疯狂地搜索网络,但我被各种各样的搜索方式弄得不知所措,每个问题和答案似乎都有太多的历史了,或者只是与我的应用程序无关 目

首先,我是Django新手,对AJAX和jQuery几乎完全不熟悉我正在本地发展。

因此,我试图实现一个HTML表,在AJAX的帮助下每隔X秒动态刷新一次(没有页面刷新),但我似乎无法让代码正常工作。我已经使用了这个问题中提供的示例:

(如果我有足够的代表,我会回答这个问题,或者从聊天室寻求帮助,但我还没有这样的奢侈)

我已经试着让它工作了10多个小时,我开始感到无助。我一直在疯狂地搜索网络,但我被各种各样的搜索方式弄得不知所措,每个问题和答案似乎都有太多的历史了,或者只是与我的应用程序无关

目前,该表在第一次查询中工作正常,它显示了对象Kala,rivinumero=1(英语中的rownumber)

所以,我有几个问题

  • 我应该将脚本包含在它自己的单独文件中,而不是包含在 HTML文件(在我的例子中是displaykala.HTML)。如果是,该文件是否应 在static/js文件夹中,还是在其他地方
  • 为了让脚本正常工作,我是否需要单独包含AJAX/JS
  • 我显然做错了什么,还是我提供的问题的答案错了
displaykala.html(脚本在同一文件中)

url.py(一个应用程序文件夹)


如果代码中有“是的,我试过这样做”之类的愚蠢实验,我很抱歉

非常感谢@DanielRoseman。“您的JS将值作为append_increment发送,但Python正在尝试访问increment.–”


我将相关行更改为
increment=int(request.GET.GET('append\u increment'))
,它修复了错误,现在表正在动态更新。非常感谢你花了宝贵的时间。现在我可以继续构建应用程序了

对不起,我不清楚到底出了什么问题。它会更新一次,然后停止,但你希望它每10秒添加一个新的集-是吗?@DanielRoseman Yes Daniel。我试图实现的是,代码将首先显示第一个对象,然后在X秒后,将下一个对象附加到表中。在这种情况下,首先是属性为rivinro的对象,值为1(有效),然后是下一个值为2的对象(此时没有发生任何事情)。您确定这是真正的代码吗<代码>{%url'get_more_tables.html%}应该会导致NoReverseMatch错误,因为url模式只调用“get_more_tables”,而没有.html(应该是这样)。是的,您发现了一个“我尝试了这个东西”实验。你是对的,它产生了那个错误。目前,它不会产生错误,如下所示:{%url'get_more_tables%}。但是,更新仍然不起作用。“浏览器工具”“网络”选项卡显示什么?是仅仅提出了一个请求,还是有重复的请求给出了一个错误,还是什么?你好,两年后,我遇到了一个类似的问题。。。我的问题是,为什么要增加10?假设你在db中有12个东西,那是卡拉模型。。。您将先打印10,然后打印2。。在那之后,你需要等到你的卡拉有20/21的东西,然后你只打印1,而不是其他9。。。我是对的还是我遗漏了什么?提前谢谢:)你好!我已经有很长一段时间没有参与那个项目了,但是IIRC的信息应该被打印在电视屏幕上,在切换到下一个“页面”之前,我们决定屏幕上有10个Kala things。对于最终用户来说,这只是一个可读性问题:)如果您认为我发布的代码中存在其他错误,那么在我收到这里的解决方案后,它很可能已经修复。希望您能找到解决问题的方法!:)
{% 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>
{% load static %}
{% for kala in kalat %}
<tr>
   <td>{{ kala.rivinro }}</td>
   <td>{{ kala.tuote }}</td>
   <td>{{ kala.latinalainen_nimi }}</td>
</tr>
{% endfor %}
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})
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'),
]