使用AJAX

时间:2019-02-16 13:02:41

标签: javascript html ajax django

从本质上讲,我正在尝试与thisthis的作者做同样的事情 在尝试做。 通过ajax调用动态更新Django模板中html模板的值。

他们两个都设法解决了他们的问题,但是,我在1.5天后无法解决问题。

index.html

{% extends 'app/base.html' %}
{%load staticfiles %}
{% block body_block %}
    <div class="container" >

        {% if elements %}
            <table id="_appendHere" class="table table-bordered">

                <tr>
                    <th>A</th>
                    <th>B</th>
                    <th>C</th>
                    <th>D</th>
                    <th>User</th>
                    <th>Date</th>
                </tr>

                {% for e in elements %}
                    <tr>
                        <td><a href="{{ e.A.url }}">{{e.A}}</a></td>
                        <td><a href="{{ e.B.url }}">{{e.B}}</a></td>
                        <td>{{ e.C }}</td>
                        <td>{{ e.D }}</td>
                        <td>{{ e.User  }}</td>
                        <td>{{ e.Date }}</td>

                    </tr>
                {% endfor %}  
            </table>

        {% else %}
            No data to display! <br/>

        {% endif %}
    </div>
{% endblock %}

<script>

var append_increment = 0;
setInterval(function() {
    $.ajax({
        type: "GET",
        url: "{% url 'get_more_tables' %}",  // URL to your view that serves new info
        data: {'append_increment': append_increment}
    })
    .done(function(response) {
        $('#_appendHere').append(response);
        append_increment += 10;
    });
}, 1000)

</script>

views.py

def index(request):

    elements = ElementFile.objects.all().order_by('-upload_date')
    context_dict = {'elements':elements}

    response = render(request,'app/index.html',context_dict)
    return response

def get_more_tables(request):
    increment = int(request.GET.get('append_increment'))
    increment_to = increment + 10
    elements = ElementFile.objects.all().order_by('-upload_date')[increment:increment_to]
    return render(request, 'app/get_more_tables.html', {'elements': elements})

get_more_tables.html

{% for e in elements %}
    <tr>
        <td><a href="{{ e.A.url }}">{{e.A}}</a></td>
        <td><a href="{{ e.B.url }}">{{e.B}}</a></td>
        <td>{{ e.C }}</td>
        <td>{{ e.D }}</td>
        <td>{{ e.User  }}</td>
        <td>{{ e.Date }}</td>
    </tr>
{% endfor %}

urls.py


urlpatterns = [
    path('', views.index, name=''),
    path('get_more_tables/', views.get_more_tables, name='get_more_tables'),
        ]

在javascript部分,我尝试过: url: "{% url 'get_more_tables' %}",带引号和不带引号

如果我尝试访问/ get_more_tables / 我收到以下错误:

/ get_more_tables /

处的TypeError

int()参数必须是字符串,类似字节的对象或数字,而不是'NoneType'

因此由于某种原因,我什么也没得到,append_increment是空字典。但为什么? 我尝试更改类似的代码,但无济于事:

    try:
        increment = int(request.GET.get('append_increment'))
    except:
        increment = 0

期望:动态加载数据库 结果:错误或非动态加载(必须手动刷新)

感谢所有尝试提供帮助的人。

0 个答案:

没有答案