我正在使用jQuery datatables插件来显示一个表,但无论我有多少行,最后一行都不会显示。使用"bInfo": true
,它在底部显示“显示11个条目中的1到10个”,因此它清楚地知道还有另一行。我尝试启用分页,但是当下一个箭头全部亮起并且所有内容都点亮时,点击它就什么也没做。
我99%确定问题与最后一行中的项目没有关系,就像我添加一个名为“Z”的新项目成为缺失的项目(他们“按字母顺序排列”
这是我的数据表初始化:
dataTable({
"bPaginate": false,
"bProcessing": true,
"bServerSide": true,
"bDeferRender": true,
"bSort": true,
"aoColumnDefs": [
{ 'bSortable': false, 'aTargets': ["_all"] },
{ 'sDefaultContent': "N/A", 'aTargets': [0,1,4,5,6,7] },
{ 'sDefaultContent': 0, 'aTargets': [2,3,8,9,10] }
],
"bInfo":true,
"sAjaxSource": Django.url('dash:testsets_header', testSetId),
"bFilter": false,
"oLanguage": {
"sProcessing": '<i class="icon-spinner icon-spin"></i> Loading...',
"sZeroRecords": "No Test Set loaded."
},
"aoColumns": [
//Various column definitions
]
});
知道最后一行不会出现的原因吗?
答案 0 :(得分:1)
由于你没有共享你自己的代码,并且你提到过使用eztables,我想我会快速写一下如何手动集成django和dataTables。这是一个更多的工作,但我认为灵活性确实得到了回报,让你准确定义你想要使用什么和不想用什么。
完全披露:我讨厌一般观点。作为对此的延伸,我也讨厌eztables和django的所有自动集成工具,这些工具阻止你实际学习如何自己做某事。这只是我的意见。话虽这么说,将django与dataTables集成并不是很复杂。只是dataTables发送了一个非常具体的XHR请求,你需要相应地解决它。以下是提供的代码here的粗略翻译。 Alsom从Django 1.5开始,simplejson已被弃用,我将向您展示如何使用json。
就我而言,我创建了一个名为Item
的模型,它只有两个字段 - 名称和电子邮件。它只是我很久以前创建的虚拟模型,我发送垃圾邮件进行测试。然后我写了这个基本代码来处理数据表。请注意,客户端代码位于另一个视图上(而不是返回dataTables XHR请求的视图)。
这是代码,之后我会重点关注。
客户端:
<table id="example" class="table">
<thead>
<tr>
<th>Name</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="2" class="dataTables_empty">Loading data from server</td>
</tr>
</tbody>
</table>
<script type="text/javascript">
$(document).ready( function () {
$('#example').dataTable( {
"bServerSide": true,
"sAjaxSource": "/datatables_view/"
} );
} );
</script>
服务器端:
import json
from cStringIO import StringIO
def datatables_view(request):
items = Item.objects.all()
# count total items:
total = items.count()
#filter
search = request.GET['sSearch']
qs = Q(name__contains=search) | Q(email__contains=search)
itemes = items.filter(qs)
# ... etc., all other filtering done here...
# count items after filtering:
total_filtered = items.count()
# slice according to length sent by dataTables:
start = int(request.GET['iDisplayStart'])
length = int(request.GET['iDisplayLength'])
items = items[start:(start+length)]
response = {
'aaData': [ [i.name, i.email]
for i in items],
'iTotalRecords': total,
'iTotalDisplayRecords': total_filtered,
'sEcho': request.GET['sEcho']
}
s = StringIO()
json.dump(response, s)
s.seek(0)
return HttpResponse(s.read())
这可能看起来很可怕,但不应该。让我们分解它(我只会介绍基础知识,你会从这里开始):
<td colspan="2" class="dataTables_empty">
的colspan的长度相同。在这种情况下,只需要姓名和电子邮件,但你可以明显地花费它,但是你想要__contains
,但您可以花费这些并创建自己的逻辑,这很有用)就像我之前说过的那样,看起来似乎有很多工作,但事实并非如此,而且灵活性确实得到了回报。祝好运!希望你能找到这个有用的=]
<强>更新强>
手动整合的一般例子确实缺乏。我花时间在这里写了一个django-snippet:https://djangosnippets.org/snippets/3019/。它以非常简化的格式包括dataTables的所有常见实现(包括排序等),包括一些管理员风格的预定义(我认为这很好)。
答案 1 :(得分:0)
您需要设置"bPaginate" : false
,因为它默认设置为true。