2014-09-22 93 views
2

也許我還沒有明白urls.py是如何工作的......但我不知道如何使用數據表的「bServerSide」加載數據......我想有一個問題與我的urls.py.我使用Django,datatables.js,這是我的代碼:Django datatables加載ajax數據加載

main.html中

<table cellpadding="0" cellspacing="0" border="0" id="example1"> 
    <thead> 
     <tr><th>Name</th></tr> 
    </thead> 
    <tbody></tbody> 
</table> 

<script type="text/javascript" language="javascript" class="init"> 
    $(document).ready(function() { 
     $('#example1').dataTable({     
      "bServerSide": true, 
      "sAjaxSource": "main.html/getdata_json", 
      "bProcessing": true, 
     }); 
    }); 
</script> 

VIEW.PY

def myajaxview(request): 
    report = [] 
    start = request.GET['iDisplayStart'] 
    length = request.GET['iDisplayLength']  
    query = name.objects.all() #or any kind of queryset  
    query = query[start:start+length] 
    for q in query: 
     report.append(json.dumps(q.nome_struttura))  
    json = json.dumps(report) 
    return HttpResponse(json, content_type='application/json') 

URLS.PY

urlpatterns = i18n_patterns('', 
     ... 
     url(r'^getdata_json$', 'views.myajaxview'), 
     ... 

我不不知道錯誤在哪裏。你能幫忙嗎?

+0

你爲什麼在你的sAjaxSource值中有「main.html」? – 2014-09-22 13:31:29

+0

因爲如果我不把「main.html」放在sAjaxSource中,我會得到「Page not found(404)」。 – RoverDar 2014-09-22 13:35:26

回答

2

你應該儘量避免在多個地方寫的網址(遵循DRY原則),你可以給一個name to your url,像這樣:

url(r'^getdata_json$', 'views.myajaxview', name='getdata_json') 

然後在HTML中使用Django內置的模板標籤url檢索視圖網址:

​​

然後在JS,你可以使用jQuery data方法來檢索URL(而不是硬編碼):

<script type="text/javascript" language="javascript" class="init"> 
$(document).ready(function() { 
    $('#example1').dataTable({     
     "bServerSide": true, 
     "sAjaxSource": $(this).data('url'), 
     "bProcessing": true, 
    }); 
}); 
</script> 

作爲一個側面說明,你可以只追加q.nome_struttura報告陣列,使用最終陣列上json.dumps,像這樣:

for q in query: 
    report.append(q.nome_struttura) 
json = json.dumps(report) 

在一般情況下,當你使用AJAX請求,您應該使用瀏覽器開發人員工具(如Firebug for Firefox或Chrome開發人員工具)精確查看傳遞到服務器的數據以及回覆的方式。

對於您的信息,有一個third party Django app正好適合您的用例:即將Django與jQuery Datatables與服務器端處理集成在一起。

+0

感謝您的回覆,但我得到的頁面沒有找到.. $(this).data('url')未定義。 – RoverDar 2014-09-22 13:54:10

+0

我替換$(this).data('url')width {%url'getdata_json'%}並獲取數據!我現在如何在表格中顯示數據? – RoverDar 2014-09-22 14:34:51