【问题标题】:django datatables additional data from server to templatedjango datatables 从服务器到模板的附加数据
【发布时间】:2013-08-31 10:14:13
【问题描述】:

所以我已经使用 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,因为这不是文档接收的东西,它是 datatable 接收的东西,我需要使用 API 来访问它,虽然我可以'不知道怎么做。

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

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

【问题讨论】:

    标签: jquery django json datatable


    【解决方案1】:

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

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

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

    $(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);
                });
            }
        });
    });
    

    【讨论】:

    • 您能给我看一个代码示例吗?我明白了,但我还是 jQuery 的新手
    猜你喜欢
    • 1970-01-01
    • 2011-08-30
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多