如何在 JS(Django 框架)中获取 defaultdic 的值?

How to get value of defaultdic in JS (Django framework)?

我想用chartjs在页面上显示一个图表(Django框架)

views.py

chart_data = defaultdict(<class 'int'>, {'3': 2, '2': 2, '8': 2, '5': 2, '7': 1})
context["chart_data"] = chart_data

home.html

<script type="text/javascript">
  var my_chart = "{{ chart_data }}";
</script>

my_chart.js

  const data = {
    labels: labels,
    datasets: [{
      label: 'My First dataset',
      backgroundColor: 'rgb(255, 99, 132)',
      borderColor: 'rgb(255, 99, 132)',
      data: Object.values(my_chart),
    }]
  };

但是没有用。我用console.log(Object.values(my_chart))查的时候发现Object.values(my_chart)returns是['d','e','f','a' , 'u', 'l', 't', 'd', 'i', 'c', 't', '(', '&' , 'l', 't', ';', 'c', 'l', 'a', 's', 's', ' ', '&', '#', 'x', '2', '7', ';', 'i', 'n', 't', '&', '# ', 'x', '2', '7', ';', '&', 'g', 't', ';', ',', ' ', '{' , '&', '#', 'x', '2', '7', ';', '3', '&', '#', 'x', '2', ' 7', ';', ':', ' ', '2', ',', ' ', '&', '#', 'x', '2', '7', ';' , '2', '&', '#', 'x', '2', '7', ';', ':', ' ', '2', ',', ' ', ' &', '#', 'x', '2', '7', ';', '8', '&', '#', 'x', '2', '7' , ';', ':', ' ', '2', ',', ' ', '&', '#', ...],它只是拆解了字典中的每个字母和符号。

你知道我怎样才能得到这个值吗?

您不应通过在模板中呈现对象来传递 javascript。这将使它像对象的 str(…) 一样呈现。对于某些对象,这可能会生成有效 JavaScript 表达式的文本,但通常不会像这里的情况那样。

您可以利用 |json_script:… template filter [Django-doc] 将数据呈现为 JSON 对象,然后将其加载到 JavaScript 脚本中,因此:

{{ chart_data|json_script:"my_chart" }}

<script type="text/javascript">
var my_chart = JSON.parse(document.getElementById('my_chart').textContent)
const data = {
    labels: labels,
    datasets: [{
      label: 'My First dataset',
      backgroundColor: 'rgb(255, 99, 132)',
      borderColor: 'rgb(255, 99, 132)',
      data: Object.values(my_chart),
    }]
  };
</script>