使图表在HighChart中显示当前年份

时间:2017-05-17 22:18:03

标签: javascript django python-3.x highcharts

图表如下所示:

enter image description here

我希望它在x轴上显示月份的当前年份。看看不同的解决方案,但没有一个帮助。

拜托,看看我哪里出错,因为我还是新手。

非常感谢你的帮助!

Django版本:1.10
Python版本:3.6

chartViewHigh.html

{% block main %}

    <h1 align="center">Analysis</h1>


{% block content %}

    <div id="container3" style="width:50%; height:400px;"></div>

{% endblock %}

{% block extrajs %}
<script>
   var endpoint = '/api/chart/data/';

    var labels01 = [];
    var defaultData01 = [];
    var labels02 = [];
    var defaultData02 = [];
    var labels03 = [];
    var defaultData03 = [];
    ...


 $.ajax({
    method: "GET",
    url: endpoint,
    success: function (data) {
            labels01 = data.labels01;
            defaultData01 = data.default01;
            labels02 = data.labels02;
            defaultData02 = data.default02;
            labels03 = data.labels03;
            defaultData03 = data.default03;
            labels04 = data.labels04;
            ...
            setChart()
        },
        error: function (error_data) {
            console.log("error");
            console.log(error_data)
        }
    });

       $(function () {
        $('#container3').highcharts({
            chart: {
                type: 'column'
            },
            title: {
                text: 'Members Registration Current Year '
            },
             credits: {
                enabled: false
            },
            xAxis: {
                type:"datetime",
            dateTimeLabelFormats:{
                year: '%Y'
            },
                tickInterval: 1,
                categories: [
                    'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
                ]
            },
            yAxis: {
                tickInterval: 1,
                minRange: 1,
                title: {
                    text: 'Data'
                }
            },
            tooltip: {
                useHTML: true
            },
            plotOptions: {
                column: {
                    pointPadding: 0.2,
                    borderWidth: 0
                }
            },
            series: [{
                name: 'Total',
                data: [
                    defaultData01,
                    defaultData02,
                    defaultData03,
                    defaultData04,
                    defaultData05,
                    defaultData06,
                    defaultData07,
                    defaultData08,
                    defaultData09,
                    defaultData10,
                    defaultData11,
                    defaultData12
                ]
            }]
        });
    });

views.py

 class ChartData(APIView):
     def get(self, request, format=None):
         today = datetime.date.today()

         # Months
         qs_count01 = Member.objects.filter(reg_date__year=today.year,
                                       reg_date__month='01').filter(
                                      association=self.request.user.association).count()
         qs_count02 = Member.objects.filter(reg_date__year=today.year,
                                       reg_date__month='02').filter(
                                        association=self.request.user.association).count()
         qs_count03 = Member.objects.filter(reg_date__year=today.year,
                                       reg_date__month='03').filter(
                                        association=self.request.user.association).count()
         ...

        labels01 = ["Jan"]             # I tried to add current year here.
        default_items01 = [qs_count01]
        labels02 = ["Feb"]
        default_items02 = [qs_count02]
        labels03 = ["Mar"]
        default_items03 = [qs_count03]
        ...

        data = {
           "labels01": labels01,
           "default01": default_items01,
           "labels02": labels02,
           "default02": default_items02,
           "labels03": labels03,
           "default03": default_items03,
            ...
        }
        return Response(data)

1 个答案:

答案 0 :(得分:1)

如果年份不需要是动态的,您可以使用内置的JavaScript日期对象在图表选项xAxis标题部分插入当前年份:

xAxis: {
    ...
    title: { 
        text: new Date().getFullYear()
    }
    ...
},

如果您需要年份是动态的,那么您可以将它与现有的AJAX调用一起传递。

views.py

class ChartData(APIView):
    def get(self, request, format=None):
    ...
    data = {
        "xAxisTitle": 2017 # assign year here dynamically using method of choice
        ...
    }

chartViewHigh.html

<script>
    ...
    var xAxisTitle = "";
    ...

    $.ajax({
        ...
        success: function (data) {
            ...
            xAxisTitle = data.xAxisTitle;
            ...
    });

    ...

        xAxis: {
        ...
        title: { 
            text: xAxisTitle
        }
        ...
    },