2015-07-10 22 views
1

我是一個新的Django用戶,遇到問題。我想獲得我的jQuery Datatables數據的自動刷新,顯示我的新數據庫內容而無需重新加載整個html頁面(使用ajax請求)。我瀏覽了不少帖子,但沒有找到我格拉爾...Django模板:如何自動刷新jQuery數據表?

這裏是我的Django template.html:

{% block js %} 
<script type="text/javascript" language="javascript" class="init"> 
    $(document).ready(function(){ 
    var oTable = $('#db_name').DataTable(); 
    }); 

    setInterval(function() { 
     oTable.ajax.reload(); 
    }, 2000); 
}); 

</script> 
{% endblock %} 

我views.py:

def db_update(request): 
    watch_files() 
    all_ = db.objects.all() 
    return render_to_response('supervision.html', {'all_fields': all_}) 

的問題是每2秒顯示一條錯誤消息「Datatables warning:table id = db_name - 無效的JSON響應」。我認爲這是正常的,因爲沒有JSON。儘管出現這個錯誤,但重新加載是有效的:如果我進行手動刷新(F5),我的數據庫中添加的所有新數據(函數watch_files在其中創建條目)顯示在我的頁面中。 對於我來說,理想的做法是獲得透明數據自動刷新,並保留Datatables數組的當前排序/頁面選項。

我也試過這個,試圖通過JSON,但沒有成功:

$(document).ready(function() { 
    var oTable = $('#db_name').DataTable({ 
     ajax: {{obj_as_json}} 
    }); 

    setInterval(function() { 
     /* oTable.ajax.reload(); */ 
     oTable.fnReloadAjax(); 
     /* oTable.fnDraw(); */ 
    }, 2000); 
}); 

def db_update(request): 
    watch_files() 
    all_ = db.objects.all() 
    jsondata = serializers.serialize('json', all_) 
    return render_to_response('supervision.html', { 
     'obj_as_json':json.dumps(jsondata), 
     'all_fields': all_}) 

如果有人可以幫助我,這將是巨大的。 Thks,Christophe

+0

[使用創建一個JSON響應的可能重複Django和Python](http://stackoverflow.com/questions/2428092/creating-a-json-response-using-django-and-python) – madzohan

回答

0

render_to_response('supervision.html')總是返回由supervision.html產生的html內容模板。

您需要返回JsonResponse對象,該對象只包含json數據。

from django.http import JsonResponse 
def db_update(request): 
    watch_files() 
    all_ = db.objects.all() 
    if request.is_ajax(): 
     jsondata = serializers.serialize('json', all_) 
     return JsonResponse(jsondata) 
    else: 
     return render_to_response('supervision.html', { 
      'all_fields': all_}) 

另外,你需要在你all_變量轉變爲看起來像數據表預計

{ 
    "data": [ 
     [ "column1_val", 
     "column2_val", 
     ... 
     ], 
    ] 
} 

我建議你去看一下https://github.com/pivotal-energy-solutions/django-datatable-view實施

+0

感謝您的回答,我會嘗試這種方式! – liblib