【发布时间】:2015-01-04 05:30:06
【问题描述】:
我是 django 的新手。我在我的 django 应用程序中使用 jquery 数据表插件。这些数据表适用于从我的视图发送的小数据集。我有一个 django 模型,它有 65k 条记录和 5 列。当我试图在 jquery 数据表中显示这些记录时,呈现的页面暂时变得无响应并且页面正在正确加载。此外,排序、搜索、分页功能在合理的时间内运行良好。即使我在数据表中显示 65k 个条目,我也希望看到页面响应。有没有办法做到这一点?或者处理大型数据集的最佳解决方案是什么?请建议我
我知道这是因为我在从服务器加载 65k 记录后尝试在客户端格式化数据表。我也用谷歌搜索了n知道服务器端处理将是处理这个问题的最佳方式。任何人请建议我如何在 django 中进行服务器端处理。
现在,我的代码如下:
Inventory.html 的一部分:
<div class="box-body table-responsive" id='postinfo'>
</div>
InventoryOutputAlldata.html:
{% load staticfiles %}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript">
$(function(){
$('#example1').dataTable({
});
});
</script>
</head>
<table id="example1" class="table table-bordered table-hover">
<thead>
<tr>
<th>Device</th>
<th>Device Type</th>
<th>Mac Address</th>
<th>IP Address</th>
<th>Status</th>
</tr>
</thead>
<tbody >
<form name="trform" method="post">
{% for key,value in data.items %}
<tr class="trselected" onclick="trclick(this)">
<td>{{ value.0 }}</td>
<td>{{ value.1 }}</td>
<td>{{ value.2 }}</td>
<td>{{ value.3 }}</td>
<td>{{ value.4 }}</td>
</tr>
{% endfor %}
</form>
</tbody>
<tfoot>
<tr>
<th>Device</th>
<th>Device Type</th>
<th>Mac Address</th>
<th>IP Address</th>
<th>Status</th>
</tr>
</tfoot>
</table>
</html>
JS:
$(function(){
var data = new Object();
data['showdata'] = 'all';
data["csrfmiddlewaretoken"] = $("input[name='csrfmiddlewaretoken']").val();
$( "#postinfo" ).load( "/alldata/", data, function( response, status, xhr )
{
});
});
URLs.py:
urlpatterns = patterns('',
url(r'^inventory/$', TemplateView.as_view(template_name='inventory.html')),
url(r'^alldata/$', 'NetworkInventory.nmap_integration.alldata'),
)
views.py:
def alldata(request):
postedInfo = request.POST
count = 0
dataDict = {}
dbData = nmap.objects.all()
if 'showdata' in postedInfo and postedInfo['showdata'] == 'all':
for data in dbData:
count += 1
dataDict[count] = []
dataDict[count].append(data.device)
dataDict[count].append(data.devicetype)
dataDict[count].append(data.macaddress)
dataDict[count].append(data.ipaddress)
dataDict[count].append(data.status)
else:
return HttpResponse('Improper Behaviour')
return render_to_response('inventoryOutputAlldata.html',{'data': dataDict})
请建议我如何修改它以处理大型数据集。
【问题讨论】:
-
不要使用
Jquery datatables plugin使用 django modelforms 和惰性分页 -
@madzohan,你能推荐 django modelforms 和惰性分页的文档吗?
标签: javascript jquery python django datatable