我已经被这个问题困扰了好几天了。我试图将JSON数据馈送到DataTables,但它只有在我使用静态文件作为源时才起作用(见下文)索引.html). 在
在索引.html在$(document).ready(function() {
$('#mydata').DataTable( {
"ajax": {
"url": '{% static "myapp/supplier.json" %}', //<= works
{# "url": '{{ suppliers_all }}',#} //<=does not work
"dataSrc": ""
},
"columns": [
{ "data": "name" },
{ "data": "classification" },
]
} );
} );
在视图.py在
^{pr2}$
JSON输出:[{"classification": "Base Supplier", "name": "Supplier Name1"}, {"classification": "Strategic Supplier", "name": "Supplier Name2"}]
当我使用django传递的变量{{ suppliers_all }}时,浏览器调试返回a 404 not found error。我尝试了根据网站的例子对JSON输出进行硬编码,尝试了很多不同的方法,但如果不直接从文件中获取,它将永远无法工作。在
更新:
通过使用JSON-Httpresponse和url创建新视图解决了这个问题def supjson(request):
suppliers_all = Supplier.objects.all().values('name', 'classification')
suppliers_all = json.dumps(list(suppliers_all), cls=DjangoJSONEncoder)
context = {'suppliers_all': suppliers_all,
return HttpResponse(suppliers_all, content_type='application/json')
然后将Ajax url更改为:"ajax": {
"url": '{% url 'myapp:supjson' %}',
"dataSrc": ""
},
当它工作时,我觉得这是多余的解决方案,因为我有问题直接通过变量传递数据。在
Update#2:问题是由于Django自动转义单逗号导致JSON解析无法正常工作。我做了以下更改:
增加了mark_保险箱视图.py在context = {'suppliers_all': mark_safe(suppliers_all),
}
字符串化JSON,然后在索引.html模板:$(document).ready(function() {
var json=JSON.stringify({{ suppliers_all }});
$('#mydata').DataTable( {
"data": JSON.parse(json),