Python Datatables Ajax在从文件读取JSON时工作,但不从变量(Django)读取JSON时工作
我已经被这个问题困扰了好几天了。我试图将JSON数据馈送到DataTables,但它只有在使用静态文件作为源时才起作用(请参见下面的index.html) index.htmlPython Datatables Ajax在从文件读取JSON时工作,但不从变量(Django)读取JSON时工作,python,json,ajax,django,datatables,Python,Json,Ajax,Django,Datatables,我已经被这个问题困扰了好几天了。我试图将JSON数据馈送到DataTables,但它只有在使用静态文件作为源时才起作用(请参见下面的index.html) index.html $(document).ready(function() { $('#mydata').DataTable( { "ajax": { "url": '{% static "myapp/supplier.json" %}', //<= works {#
$(document).ready(function() {
$('#mydata').DataTable( {
"ajax": {
"url": '{% static "myapp/supplier.json" %}', //<= works
{# "url": '{{ suppliers_all }}',#} //<=does not work
"dataSrc": ""
},
"columns": [
{ "data": "name" },
{ "data": "classification" },
]
} );
} );
JSON输出:
[{"classification": "Base Supplier", "name": "Supplier Name1"}, {"classification": "Strategic Supplier", "name": "Supplier Name2"}]
当我使用django传递的变量{{suppliers\u all}}
时,浏览器调试返回。我尝试根据网站示例对JSON输出进行硬编码,尝试了许多不同的方法,但如果不直接从文件中获取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": ""
},
当它工作时,我觉得这是一个冗余的解决方案,因为我有直接通过变量传递数据的问题
更新#2:问题是由于Django自动转义单个逗号导致JSON解析无法工作。我做了以下更改:
在views.py中添加了mark_safe
context = {'suppliers_all': mark_safe(suppliers_all),
}
字符串化JSON,然后在index.html模板中解析:
$(document).ready(function() {
var json=JSON.stringify({{ suppliers_all }});
$('#mydata').DataTable( {
"data": JSON.parse(json),
也许您不需要从url加载数据。如果您的数据已预加载,请尝试将其直接添加到DataTable
$(document).ready(function(){
$('#mydata').DataTable({
"data": JSON.parse('{{ suppliers_all }}'),
"columns": [
{"data": "name"},
{"data": "classification"},
]
});
});
好吧,你得到的是404,因为你的上下文变量不是一个真正的URL资源,ajax认为它是一个实际的URL。我想这是有道理的,但是有没有办法在变量中传递它呢?所有示例都有指向文件的链接。我是否需要生成单独的url页面并传递它,或者有没有直接执行的方法?我已经尝试过了,但没有成功。桌子会空的,我会得到。我在
'{{suppliers\u all}}}
中添加了逗号,否则会产生语法错误。我通过使用JSON输出创建新的视图和url,然后将Ajax链接到它,成功地解决了这个问题,但这仍然是一个多余的解决方案。谢谢。我再次查看了更多的细节,并意识到我遇到的问题是因为Django render在生成模板时自动转义了单个逗号,这就是为什么我之前尝试使用JSON解析时发现JSON解析不起作用的原因:)
$(document).ready(function(){
$('#mydata').DataTable({
"data": JSON.parse('{{ suppliers_all }}'),
"columns": [
{"data": "name"},
{"data": "classification"},
]
});
});