我正在实现一个带过滤器的表。 现有的库(例如DataTables)都不适用于我,因为它们基于客户端分页,我不能从我的数据库中提取所有数据,并在客户端对其进行分页,因为它有超过500万个项目。
所以,问题是我希望能够在输入字段中编写内容并相应地过滤表中的项目。 一切开始的URL是:
此网址包含 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正在编写新视图。也许路由有问题? 我不知道如何继续,请帮忙。
答案 0 :(得分:0)
404 Not Found是因为
$("#table_body").html('').load(
"app/views/tableRows.html",
{reg_list: json.result}
);
需要可以作为静态资产访问,而不是视图模板。复制/移动tableRows.html
至app/static/
并将您的myJS.js
更新为正确的静态网址。
或者在urls.py
中定义与app/views/tableRows.html
匹配的视图。看起来只有urls.py
的一部分被共享,所以我错过了部分图片。