在 Django 模板中使用 for 循环显示多个 chart.js 图表

Posted

技术标签:

【中文标题】在 Django 模板中使用 for 循环显示多个 chart.js 图表【英文标题】:Display multiple chart.js charts using for loop in Django template 【发布时间】:2018-08-11 13:23:07 【问题描述】:

我有一个要在其中显示的 Django 模板:

一些数据1 数据图表 1 一些数据2 数据图表2 一些数据3 数据图表2

我的 html 中有一个 Django 模板循环,用于显示数据,然后是一个用于显示每个图表的画布。数据显示正确,我可以让它显示第一个图表。

我想不通的是:

如何让它显示多个图表?目前它显示第一个图表但不显示后续图表 - 我想可能是因为画布 id 在每次迭代中总是相同的?

模板

% for session_data in ratings_by_theme %
 session_data 

<div class="myChart">
    <canvas id="myChart"  ></canvas>

    <script>


        var ctx = document.getElementById("myChart").getContext('2d');
        var myChart = new Chart(ctx, 
            type: 'bar',

            data: 
                labels: [% for label in chart_session_labels % ' label ', % endfor %],
                datasets: [
                    label: "Teacher",
                    data:  teacher_chart_data [ forloop.counter0 ],
                    backgroundColor: 'rgba(255, 99, 132, 0.4)',
                    borderColor: 'rgba(255,99,132,1)',
                    borderWidth: 1
                ,
                    
                        label: "Parent",
                        data:  parent_chart_data [ forloop.counter0 ],
                        backgroundColor: 'rgba(255, 206, 86, 0.4)',
                        borderColor: 'rgba(255, 206, 86, 1)',
                        borderWidth: 1

                    ,
                    
                        label: "Learner",
                        data:  learner_chart_data [ forloop.counter0 ],
                        backgroundColor: 'rgba(75, 192, 192, 0.4)',
                        borderColor: 'rgba(75, 192, 192, 1)',
                        borderWidth: 1

                    ,
                    
                        label: "Leader",
                        data:  leader_chart_data [ forloop.counter0 ],
                        backgroundColor: 'rgba(255, 159, 64, 0.4)',
                        borderColor: 'rgba(255, 159, 64, 1)',
                        borderWidth: 1

                    
                ]
            ,
            options: 
                responsive: false,
                scales: 
                    yAxes: [
                        ticks: 
                            beginAtZero: true
                        
                    ]
                
            
        );


    </script>
</div>
% endfor %

【问题讨论】:

【参考方案1】:

在一个画布中显示多个图表的一种方法是使用混合图表。

更多信息:

https://www.chartjs.org/docs/latest/charts/mixed.html

【讨论】:

【参考方案2】:

所以为了引用画布,我将forloop索引附加到画布id:

<canvas id="myChart forloop.counter0 "  >

然后在 chart.js 上下文中引用画布:

var ctx = document.getElementById("myChart" +  forloop.counter0 ).getContext('2d'); 

【讨论】:

马克,我也需要同样的东西,这个词是给你的吗?或者你找到解决方案了吗?

以上是关于在 Django 模板中使用 for 循环显示多个 chart.js 图表的主要内容,如果未能解决你的问题,请参考以下文章

Django模板中的for循环

如何在 django 模板中从 for 循环中转义一行

使用 For 循环的 Django Python 模板嵌套列表

Django、模板、for 循环和循环

Django模板仅在for循环中第一次出现匹配时执行

Django模板进阶007