我正在使用Django,并尝试直接使用javascript获取数据。这是一些代码。在idx_map.html中,JS部分如下所示:
var act = '{{ activities_json }}';
document.getElementById("json").innerHTML = act[0];
var obj = JSON.parse(act);
document.getElementById("demo").innerHTML = 1;
我正在尝试查找错误,因此我在代码中添加了一些代码以输出到页面。问题是JSON.parse()
行。如果在该行中添加注释,则可以在HTML页面中看到[和1,这意味着还没有错误。但是,如果我取消对JSON.parse()
行的注释,我将再也看不到1,表明JSON.parse()
代码有错误。但是我没有发现任何错误。有人可以帮我吗?
在views.py中,我将该对象序列化为一个json文件。代码是:
def map(request):
activities_json = serializers.serialize("json", Activities.objects.all())
context = {
"activities": Activities.objects.all(),
"activities_json": activities_json,
}
return render(request, "CS_Activities/idx_map.html", context)
因此该行为应如下所示(作为字符串?):
[
{"model": "CS_Activities.activities", "pk": 1, "fields": {"act_name": "gun shot", "location": "York Universitty", "loc_lat": 43.76776, "loc_long": -79.50297, "time": "2018-11-05T20:25:08Z", "description": "a people dead"}}, {"model": "CS_Activities.activities", "pk": 2, "fields": {"act_name": "another gun shot", "location": "York Village", "loc_lat": 43.76, "loc_long": -79.5, "time": "2018-11-05T22:35:06Z", "description": "A person shot dead while walking"}}
]
更新: 在idx_map.html中,如果我只是将var替换为长字符串,则不会有任何错误。因此,我认为我的问题是如何从Django数据库中以json文件格式检索数据。
答案 0 :(得分:1)
您需要使用safe
将该字符串(在这种情况下为JSON)标记为不需要在输出之前进行进一步的HTML转义。
var act = '{{ activities_json|safe }}';
这部分代码:
document.getElementById("json").innerHTML = act[0];
只获取字符串的第一个元素,即[。
这部分代码
var obj = JSON.parse(act);
返回错误,因为您以前没有使用过safe
,并且引号(“)在模板中以"e;
的形式输出,这是无效的。我想您想要这样的东西:
var act = '{{ activities_json|safe }}';
var lat = 43.767760;
var lng = -79.502970;
var latLng = {lat: lat, lng: lng};
var obj = JSON.parse(act);
document.getElementById("json").innerHTML = obj[0];
现在obj[0]
将返回第一个JSON元素,但是我不确定您要使用它做什么。