【问题标题】:Can't display another Highcharts chart on my HTML page - Django无法在我的 HTML 页面上显示另一个 Highcharts 图表 - Django
【发布时间】:2019-12-15 16:13:39
【问题描述】:

一直在查看 Highcharts 文档以及 simpleisbetterthancomplex 的“Integrating Django and Highcharts”。我不确定我的代码出了什么问题,第二个图表没有显示。我正在使用 Django views.py 从数据库中检索数据。

def dashboard_viewUser(request):
  dataset = Profile.objects\
  .values('is_active')\
  .annotate(is_active_count = Count('is_active', filter = Q(is_active = True)),
    not_is_active_count = Count('is_active', filter = Q(is_active = False)))\
  .order_by('is_active')

categories = list()
is_active_series_data = list()
not_is_active_series_data = list()

for entry in dataset:
  categories.append('%s Active' % entry['is_active'])
is_active_series_data.append(entry['is_active_count'])
not_is_active_series_data.append(entry['not_is_active_count'])

is_active_series = {
  'name': 'Active user',
  'data': is_active_series_data,
  'color': 'green'
}

not_is_active_series = {
  'name': 'Inactive user',
  'data': not_is_active_series_data,
  'color': 'red'
}

chart = {
  'chart': {
    'type': 'column'
  },
  'title': {
    'text': 'Active user on Current Platform'
  },
  'xAxis': {
    'categories': categories
  },
  'yAxis': {
    'title': {
      'text': 'No.of users'
    },
    'tickInterval': 1
  },
  'plotOptions': {
    'column': {
      'pointPadding': 0.2,
      'borderWidth': 0
    }
  },
  'series': [is_active_series, not_is_active_series]
}

dump = json.dumps(chart)

return render(request, 'accounts/dashboard.html', {
  'chart': dump
})
`
    
    def dashboard_viewDepartment(request):
        dataset = Department.objects \
            .values('department') \
            .annotate(IT_count=Count('department', filter=Q(department="IT")),
                      Sales_count=Count('department', filter=Q(department="Sales")),
                      Admin_count=Count('department', filter=Q(department="Admin")),
                      HR_count=Count('department', filter=Q(department="HR")),) \
            .order_by('department')
    
        categories = list()
        IT_series_data = list()
        Sales_series_data = list()
        Admin_series_data = list()
        HR_series_data = list()
    
        for entry in dataset:
            categories.append('%s Department' % entry['department'])
            IT_series_data.append(entry['IT_count'])
            Sales_series_data.append(entry['Sales_count'])
            Admin_series_data.append(entry['Admin_count'])
            HR_series_data.append(entry['HR_count'])
    
        IT_series = {
            'name': 'IT',
            'data': IT_series_data,
            'color': 'green'
        }
    
        Sales_series = {
            'name': 'Sales',
            'data': Sales_series_data,
            'color': 'yellow'
        }
    
        Admin_series = {
            'name': 'Admin',
            'data': Admin_series_data,
            'color': 'red'
        }
    
        HR_series = {
            'name': 'HR',
            'data': HR_series_data,
            'color': 'blue'
        }
    
        chart2 = {
            'chart': {'type': 'column'},
            'title': {'text': 'Containers per department'},
            'xAxis': {'categories': categories},
            'yAxis': {
                'title': {
                    'text': 'No.of containers'},
                'tickInterval': 1
                    },
            'plotOptions': {
                'column': {
                    'pointPadding': 0.2,
                    'borderWidth': 0
                }
            },
            'series': [IT_series, Sales_series, Admin_series, HR_series]
        }
    
        dump = json.dumps(chart2)
    
        return render(request, 'accounts/dashboard.html', {'chart2': dump})
<div class="carousel-inner">
  <div class="carousel-item active">
    <div class="border" id="container" style="min-width: 100px; height: 
                                400px; margin: 0 auto;"></div>
    <script src="https://code.highcharts.com/highcharts.src.js">
    </script>
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <script>
      Highcharts.chart('container', {
        {
          chart | safe
        }
      });
    </script>
  </div>
  <div class="carousel-item">
    <div class="border" id="container2" style="min-width: 100px; 
                               height: 400px; margin: 0 auto;"></div>
    <script src="https://code.highcharts.com/highcharts.src.js">
    </script>
    <script src="https://code.jquery.com/jquery-3.3.1.min.js">
    </script>
    <script>
      Highcharts.chart('container2', {
        {
          chart2 | safe
        }
      });
    </script>
  </div>
  <div class="carousel-item">
    <div class="carousel-caption">
      <h3>Currently Unavailable</h3>
    </div>
  </div>
</div>

期望两个图表显示在轮播的两个不同面板上

【问题讨论】:

  • 嗨@Django新手,你能提供我生成的JS和HTML代码吗?

标签: javascript jquery django highcharts


【解决方案1】:

其实你只需要 highchart 和 jquery.min.js 的一个脚本 src 。 将chart2更改为图表。

 <script src="https://code.highcharts.com/highcharts.src.js"> 
 </script>
 <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
 <script>
<div class="carousel-inner">
 <div class="carousel-item active">
 <div class="border" id="container" style="min-width: 100px; height: 
      400px; margin: 0 auto;"></div>       
  Highcharts.chart('container', {{ chart|safe }});
 </script>
 </div>
 <div class="carousel-item">
 <div class="border" id="container2" style="min-width: 100px; 
 height: 400px; margin: 0 auto;"></div>

 <script>
                      Highcharts.chart('container2', {{ chart|safe }});
                  </script>
        </div>
        <div class="carousel-item">
          <div class="carousel-caption" >
              <h3>Currently Unavailable</h3>
          </div>
       </div>
</div>

【讨论】:

  • 感谢您的建议!但是我的第二个图表是 container2 仍然没有显示:(
【解决方案2】:

您不需要多个 jquery/highchart。只需将它包含在页面顶部一次,它就可以适用于多个图表。我已经稍微更新了您的代码,并且由于我无法通过安全方法访问您的数据输出,因此我将图表初始化为空白图表。

  <!-- Place your javascripts once -->
  <script src="https://code.highcharts.com/highcharts.src.js">
  </script>
  <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

  <div class="carousel-inner">
    <div class="carousel-item active">
      <div class="border" id="container" style="min-width: 100px; height: 
                    400px; margin: 0 auto;"></div>

      <script>
        Highcharts.chart('container', {
          title: {
            text: 'Im Chart 1' // Replace your {{ chart|safe }} here.
          },
        });

      </script>
    </div>
    <div class="carousel-item">
      <div class="border" id="container2" style="min-width: 100px; 
                   height: 400px; margin: 0 auto;"></div>

      <script>
        Highcharts.chart('container2', {
          title: {
            text: 'Im Chart 2' //Replace your {{ chart2|safe }} here.
          },
        });

      </script>
    </div>
    <div class="carousel-item">
      <div class="carousel-caption">
        <h3>Currently Unavailable</h3>
      </div>
    </div>
  </div>

查看这个小提琴的工作输出。

https://jsfiddle.net/ebkr65ma/

【讨论】:

  • 我正在使用 {{ chart|safe }} 因为我已经在我的 django views.py 中编写了所有图表描述。我能够显示第一个图表,但不能显示第二个。
  • 您可以尝试使用相同的图表输出两次,看看您的第二个图表变量是否有问题?
  • 我已经添加了我的 django views.py 不太确定是否实现了第二个图表
  • 我对 Python 的了解为零。但是,这不会只返回第一个图表然后第二个chart2 为空值吗?
  • 您可以尝试将您的html页面上的chart2替换为chart,看看是否有效。然后将 chart 实例更改为 chart2 以查看是否有效。
猜你喜欢
  • 2019-11-06
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 2015-05-17
  • 2016-09-09
  • 1970-01-01
  • 2020-10-20
  • 2018-03-27
相关资源
最近更新 更多