在Django模板中访问字典值

Accessing dict values in Django template

本文关键字:访问 字典 Django      更新时间:2023-09-26

我在访问一个dict对象的值时遇到了麻烦,我试图在Django中发送给一个模板。我可以在我的视图中访问和打印字典的内容,但是当我试图将数据发送到我的模板时,有各种各样的字符,比如它没有被正确编码。一开始我以为这可能是序列化的问题,但是我发现这篇文章说json_serializer。Serialize应该与查询集一起使用。这是正确的吗?从这里,我尝试了以下操作。

一开始我试着单独发送data变量而不需要任何格式,像这样

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__),而只使用json.dumps(data),我会得到一个错误,关于对象不是JSON serializable

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

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]);
}

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

考虑使用

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

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

注意safe过滤器那里停止django把你的"变成&quot;