Django datatables加载ajax数据加载
问题描述:
也许我还没有明白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'),
...
我不不知道错误在哪里。你能帮忙吗?
答
你应该尽量避免在多个地方写的网址(遵循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与服务器端处理集成在一起。
你为什么在你的sAjaxSource值中有“main.html”? – 2014-09-22 13:31:29
因为如果我不把“main.html”放在sAjaxSource中,我会得到“Page not found(404)”。 – RoverDar 2014-09-22 13:35:26