仅使用新项目刷新模板中的表格内容(Django)

时间:2017-07-25 13:56:38

标签: jquery python ajax django django-templates

我正在实现一个带过滤器的表。 现有的库(例如DataTables)都不适用于我,因为它们基于客户端分页,我不能从我的数据库中提取所有数据,并在客户端对其进行分页,因为它有超过500万个项目。

所以,问题是我希望能够在输入字段中编写内容并相应地过滤表中的项目。 一切开始的URL是:

  

http://127.0.0.1:8000/es/view-containing-the-table/

此网址包含 custom_table.html 中的html(请参阅下面的文件),其中包含一个名为 table_rows.html 的子模板,我要刷新的那个

要做到这一点,我已经完成了以下工作:

我的项目结构:

project
|-app
  |-static
  |  |-javascript
  |    |-myJS.js
  |
  |-templates
  |  |-templates1
  |    |-custom_table.html
  |    |-table_rows.html
  |
  |-views
  |  |-__init__.py   #Gathers all the views from othe files)
  |  |-ajaxCalls.py
  |  |-modelViews.py
  |
  |-urls.py

urls.py

url(r'^table_rows/$', views.tableRows, name='tableRows'),

custom_table.html

#extend and loads here

{% block content %}
<table id="myTable"">
    ...
    <thead> #headers and filters for each column </thead>
    <tbody id="table_body">
        {% include "templates1/table_rows.html" %}
    </tbody>
</table>

{% endblock %}

在表格内部,每列都有一个输入。我可以在其中写入,然后按Enter键以触发将调用以下ajax函数的函数:

myJS.js

function getFilteredData(){

    modelName = #get ModelName
    var filters = #get Filters

    $.ajaxSetup({
        headers: { "X-CSRFToken": getCookie("csrftoken") }
    });
    $.ajax({
        url : "../get_filtered_data/",
        type : "POST",
        data : {
            modelName: modelName,
            filters: JSON.stringify(filters)
        },
        dataType: 'json',
        success : function(json) {
            $("#table_body").html('').load("app/views/tableRows.html", {reg_list: json.result});
        },
        error : function(xhr,errmsg,err) {
            alert('Something went wrong');
            console.log(xhr.status + ": " + xhr.responseText);
        }
    });
}

ajaxCalls.py

def get_filtered_data(request):
    if request.method == "POST":
        try:

            [...]
            reg_list = query response with filtered Data from DB
            [...]

            return JsonResponse({"status": "ok", "result":reg_list})
        except Exception as e:
            return JsonResponse({"status": "none"})
    else:
        return JsonResponse({"status": "none"})

modelViews.py

def tableRows(request):
    print("I'm in")

    return render(request, 'templates1/table_rows.html', {

})

一切正常,直到我必须在表格中加载reg_list 。 Chrome控制台中显示以下错误:

  

jquery-3.1.1.min.js:4 POST http://127.0.0.1:8000/es/view-containing-the-table/app/views/tableRows.html 404(未找到)

所以,显然,网址都搞砸了,因为除了已经存在的视图之外,django正在编写新视图。也许路由有问题? 我不知道如何继续,请帮忙。

1 个答案:

答案 0 :(得分:0)

404 Not Found是因为

$("#table_body").html('').load(
    "app/views/tableRows.html",
    {reg_list: json.result}
);

需要可以作为静态资产访问,而不是视图模板。复制/移动tableRows.htmlapp/static/并将您的myJS.js更新为正确的静态网址。

或者在urls.py中定义与app/views/tableRows.html匹配的视图。看起来只有urls.py的一部分被共享,所以我错过了部分图片。