使用django将数组中的数据从数组传递到chartjs

问题描述 投票:0回答:2

因此,我试图将一些数据传递给图表(使用chartjs和django),我可以在网页中打印数据,但不能将其作为参数传递给图表。另外,如果我将硬编码的数据放在图表中也可以,但是使用数组中的数据,我什么也看不到...

我已经尝试过{{data |安全}}和{{标签|安全}},但出现错误,因此我没有弄错我在做什么。谁能帮我吗?

为了更好地解释:

views.py

import csv

def home(request):
    csvFilePath = "../data/raw_datasets/covid_confirmed.csv"
    data = []
    labels = []
    with open(csvFilePath, "r") as csvfile:
        csv_reader = csv.reader(csvfile, delimiter=',')
        next(csv_reader)
        for row in csv_reader:
            data.append(row[1])
            labels.append(row[73])

    return render(request, 'home.html',
                  {
                      'data': data,
                      'labels': labels
                  }) 

home.html

<!DOCTYPE html>

<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/Chart.min.js"></script>
        <title>Crypto Covid</title>
    </head>

    <body>
        <h4>{{data | safe}}</h4>
        <p>--------------</p>
        <h4>{{labels|safe}}</h4>
        <div class="container">
            <canvas id="chart">

            </canvas>
        </div>

    </body>

    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/Chart.min.js"></script>
    <script> src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.js"</script>
  <script>

    var config = {
      type: 'pie',
      data: {
        datasets: [{
          data: {data} ,
          backgroundColor: [
            '#696969', '#808080', '#A9A9A9', '#C0C0C0', '#D3D3D3'
          ],
          label: 'Population'
        }],
        labels: {labels}
      },
      options: {
        responsive: true
      }
    };

    window.onload = function() {
      var ctx = document.getElementById('chart').getContext('2d');
      window.myPie = new Chart(ctx, config);
    };
</script>
</html>

我页面中的结果:

my result page

javascript python django csv chart.js
2个回答
0
投票

请尝试这个

import csv

def home(request):
    csvFilePath = "../data/raw_datasets/covid_confirmed.csv"
    data_list = []
    with open(csvFilePath, "r") as csvfile:
        csv_reader = csv.reader(csvfile, delimiter=',')
        next(csv_reader)
        for row in csv_reader:
            data_list.append({'label' : row[73], "y" : row[1]})
    t = json.dumps(data_list)    

    return render(request, 'home.html',
                  {
                      'output':t
                  }) 

<!DOCTYPE html>

<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/Chart.min.js"></script>
        <title>Crypto Covid</title>
    </head>

    <body>

        <div class="container">
            <canvas id="chart">

            </canvas>
        </div>

    </body>

    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/Chart.min.js"></script>
    <script> src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.js"</script>
  <script>
    data = JSON.parse("{{ output|escapejs }}")
    var config = {
      data: [{type: "pie",dataPoints: data}],
      options: {
        responsive: true
      }
    };

    window.onload = function() {
      var ctx = document.getElementById('chart').getContext('2d');
      window.myPie = new Chart(ctx, config);
    };
</script>
</html>

0
投票

您需要使用名为json_script,{{your_array | json_script:“ chart_data”}}的模板标记,然后使用javascript访问此数据-var value = JSON.parse(document.getElementById('chart_data')。textContent);

https://docs.djangoproject.com/en/2.2/ref/templates/builtins/#json-script Django documentation

© www.soinside.com 2019 - 2024. All rights reserved.