2014-09-22 166 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