1

所以我用 django 服务器端处理实现了 dataTables 插件。看起来有点像这样:

模板:

<script type="text/javascript">
    $(document).ready(function() {
    $('#example').dataTable( {
        "bProcessing": true,
        "bServerSide": true,
        "sAjaxSource": "/datatable/"
    } );
} );

</script>

意见:

def main_view(request):
    return render_to_response('index.html')

def datatables_view(request):
    start = request.GET['iDisplayStart']
    length = request.GET['iDisplayLength']

    query = myUser.objects.all()
    total = query.count()

    if request.GET.has_key('sSearch'):
        # filtering...


    query = query[start:start+length]
    response = {"aaData": [(q.name, q.state, q.email) for q in query],
                "iTotalRecords": total,  
                ...additional params for dataTable... }

然后我使用 json.dump 序列化数据并像这样发送

s = json.dump(response)
return HttpResponse(s.read())

这可能有点错误,但那是因为我没有使用我的实际代码,而是从内存中写下来。如果这里有任何错误并不重要,只要知道这是一般的想法......(另外,我使用 json 因为我在不推荐使用 simplejson 的 django 1.5 上运行它)。

所以就像我说的,这很好用。该页面的 url 与 main_view 一起使用,并且数据表将其 ajax 调用发送到 datatables_view 并且一切都在滴答作响。现在我想服务器(而不是服务器)发送一些额外的数据。如,我想添加一些要在模板中使用的数据。该数据必须来自 datatables_view,因为它依赖于当前查询并且应该是动态的。假设我将其添加到响应中:

    response = {"aaData": [(q.name, q.state, q.email) for q in query],
                "iTotalRecords": total,
                 ...additional params for dataTable...,
                "sMeow": query.filter(name='cat')[:20]}

这显然是一个示例,但重点是当您更改查询时(例如您按搜索词过滤或更改排序),那么 sMeow 也会更改。然后我想在模板上以某种方式访问​​它。显然我不能这样做:

{{ sMeow }}

但我也不能使用parseJSON,因为这不是文档接收的东西,而是数据表接收的东西,我需要使用 API 来访问它,尽管我找不到如何做到这一点。

因为最终我有一个按钮可以在 sMeow 值上运行一些脚本(并将其发送到不同的请求),所以我查看了 tabletools 插件,但它在服务器端并不能很好地发挥作用(“TableTools 更多专注于客户端”来源)。

尽管我宁愿使用数据表的默认功能,但我并不羞于使用其他插件。任何帮助,将不胜感激!

4

1 回答 1

1

我还将数据表与 django 一起使用,包括服务器端处理。您想要实现的问题是数据表本身正在向 url 发出非常具体的请求,并期望某些数据以便它可以更新表。

您可以实现自定义fnServerData函数,提取您的sMeow值并进行处理,然后委托给数据fnCallback表以更新表。但是,这将只允许您使用sMeow来自 javascript 的值,因为处理发生在客户端(所以没有 django 模板)。

直接从上面的链接中获取代码示例(并添加一点,请参阅注释):

$(document).ready(function() {
    $('#example').dataTable( {
        "bProcessing": true,
        "bServerSide": true,
        "sAjaxSource": "../examples_support/server_processing.php",
        "fnServerData": function ( sSource, aoData, fnCallback ) {
            $.getJSON( sSource, aoData, function (json) { 
                var obj = JSON.parse(json);
                var smeow = obj['sMeow'];
                // do what you need with smeow
                fnCallback(json);
            });
        }
    });
});
于 2013-08-28T12:07:59.680 回答