2016-11-14 151 views
0

我无法访问我试图发送到Django模板的字典对象的值。我可以在我的视图中访问和打印字典的内容,但是当我尝试将数据发送到我的模板时,会出现各种字符,例如它没有正确编码。起初我以为这可能是序列化的问题,但我发现this post其中声明json_serializer.serialize应该与查询集一起使用。它是否正确?从这里我尝试了以下。在Django模板中访问字典值

起初,我试图仅仅通过自身发送数据的变量没有任何格式,像这样

data = {'item_1': 123, 'item_2': 456, 'item_3': ['a','b','c'] } 
return render(request, 'testsite/new_page.html', {'data' : data}) 

在模板中,我有以下

<script>var data = "{{ data }}"; </script> 
<script>console.log(data);</script> 

// displays the following 
// &lt;testsite.views.data object at 0x1045f1e48&gt; 

然后我试图格式化数据JSON

data = {'item_1': 123, 'item_2': 456, 'item_3': ['a','b','c'] } 
return render(request, 'testsite/new_page.html', {'data' : json.dumps(data.__dict__) }) 

//template 
<script>var data = "{{ data }}"; </script> 
<script>console.log(data);</script> 

// the following is the improperly formatted result 
// {&quot;item_1&quot;: 123, &quot;item_2&quot;: 456, &quot;item_3&quot;: [&quot;a&quot;,&quot;b&quot;,&quot;c&quot;,] 

如果我不使用json.dumps(data.__dict__)而是改为jus t有json.dumps(data)我得到关于对象的错误不是JSON可序列化

在我看来,我有以下几点。该字典的内容格式正确。

print(data.__dict__) 
import pdb; pdb.set_trace() 

# displays the dict properly 
# {'item_1': 123, 'item_2': 456, 'item_3': ['a','b','c'] } 

在模板试图通过使用JavaScript,像这样的数据对象上进行迭代,但它只是显示格式不正确的字典的每个单独的字符。

for (var key in data) { 
    console.log(data[key]); 
} 

我在做什么错误,导致模板中格式不正确的数据?

+0

不能只是你'返回渲染(请求,“ testsite/new_page.html',{'data':data})'? – shuttle87

+0

对不起,我应该更新。当我这样做时,会产生一个奇怪的结果,看起来像是一个内存位置。我会更新我的帖子 – user1852176

+0

e4c5

回答

2

考虑使用

return render(request, 'testsite/new_page.html', {'serialized_data' :json.dumps(data) }) 

<script>var data = "{{ serialized_data | safe }}"; </script> 

注意safe过滤器有停止的Django把你"&quot;

+0

当我这样做时,我得到一个引用错误ReferenceError:数据未定义。我一定要说明你如何使用serialized_data而不是像我这样的数据。仍然导致参考答案,与e4c5的答案相同 – user1852176

+0

@ user1852176 plz根据您的代码调整变量名称 – ospider

+0

我这样做了,但忘了在我的评论中提到这一点。在看到它之前,我一定改变了我的评论。另一个答案也会导致参考错误。 – user1852176