template->urls->views->html
templates.html

urls.py
from app01.views import depart, user, pretty, admin, account, task, order, chart
# ------------------数据统计---------------------------------------------------
path('chart/list/', chart.chart_list),
chart,py

chart_list.html

Echarts官网
下载Echarts
https://echarts.apache.org/handbook/zh/get-started/


ctrl+s保存

将其拷贝到项目的js文件中去

在页面中导入

导入方法
找到图表位置定义标签和id

下面画图时导入位置id

即可

通过修改js里的数据可以直接修改图表


修改大小

修改小标的位置


修改标题位置


urls.py
# ------------------数据统计---------------------------------------------------
path('chart/list/', chart.chart_list),
path('chart/bar/', chart.chart_bar),
chart.py
from django.shortcuts import render
from django.http import JsonResponse
def chart_list(request):
"""数据统计列表"""
return render(request, 'chart_list.html')
def chart_bar(request):
"""构造柱状图"""
# 数据可以从数据库中获取
legend = ['大白', '小黑']
series_list = [
{
"name": '大白',
"type": 'bar',
"data": [5, 20, 36, 10, 10, 20]
},
{
"name": '小黑',
"type": 'bar',
"data": [3, 10, 16, 20, 15, 90]
}
]
x_axis = ['1月', '2月', '3月', '4月', '5月', '6月']
result = {
"status":True,
"data":{
"legend":legend,
"series_list":series_list,
"x_axis":x_axis,
}
}
return JsonResponse(result)
chart_list.html
{% extends 'template.html' %}
{% load static %}
{% block content %}
<div class="container">
数据统计
<!--面板1-->
<div class="panel panel-default">
<div class="panel-heading">折线图</div>
<div class="panel-body">
折线图
</div>
</div>
<div class="row">
<div class="col-sm-8">
<!--面板2-->
<div class="panel panel-default">
<div class="panel-heading">柱状图</div>
<div class="panel-body">
<div id="m2" style="width: 100%;height: 400px;">
</div>
</div>
</div>
</div>
<div class="col-sm-4">
<!--面板3-->
<div class="panel panel-default">
<div class="panel-heading">饼图</div>
<div class="panel-body">
饼图
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block js %}
<script src="{% static 'js/echarts.js' %}"></script>
<script type="text/javascript">
$(function () {
initBar();
})
/**
* 初始化柱状图
*/
function initBar() {
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('m2'));
// 指定图表的配置项和数据
var option = {
title: {
text: '上半年业绩图',
textAlign: "auto",
left: "center",
},
tooltip: {},
legend: {
data: [],//后台获取
bottom: 0,
},
xAxis: {
data: []//后台获取
},
yAxis: {},
series: []//后台获取
};
//使用Ajax向后台获取请求
$.ajax({
url: "/chart/bar/",
type: "get",
dataType: "JSON",
success: function (res) {
//将后台返回的数据更新到option中(legend,xAxis,series)
if (res.status) {
//将后台数据更新到option中
option.legend.data = res.data.legend;
option.xAxis.data = res.data.x_axis;
option.series = res.data.series_list;
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
} else {
}
}
})
}
</script>
{% endblock %}
访问页面

定义图表位置与id

js函数部分
/**
* 初始化饼状图
*/
function initPie() {
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('m3'));
var option = {//必须定义成局部变量不然按全局变量处理
title: {
text: '部门预算占比',
subtext: '代码骑士未来游戏公司',
left: 'center'
},
tooltip: {
trigger: 'item'
},
legend: {
//orient: 'vertical',
//left: 'left',
bottom: 0
},
series: [
{
name: '预算',
type: 'pie',
radius: ['40%', '70%'],
avoidLabelOverlap: false,
itemStyle: {
borderRadius: 10,
borderColor: '#fff',
borderWidth: 2
},
label: {
show: false,
position: 'center'
},
emphasis: {
label: {
show: true,
fontSize: '40',
fontWeight: 'bold'
}
},
labelLine: {
show: false
},
data: [],
}
]
};
//使用Ajax向后台获取请求
$.ajax({
url: "/chart/pie/",
type: "get",
dataType: "JSON",
success: function (res) {
//将后台返回的数据更新到option中(legend,xAxis,series)
if (res.status) {
//将后台数据更新到option中
option.series[0].data = res.data
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
} else {
}
}
})
myChart.setOption(option);
}
后台
urls.py
# ------------------数据统计---------------------------------------------------
path('chart/list/', chart.chart_list),
path('chart/bar/', chart.chart_bar),
path('chart/pie/', chart.chart_pie),
chart.py
def chart_pie(request): """构造饼状图""" db_data_list = [ {"value": 1048, "name": '技术部'}, {"value": 735, "name": '运营部'}, {"value": 580, "name": '新媒体'}, ] result = { "status":True, "data":db_data_list, } return JsonResponse(result)'运行
前端页面

前端
chart_list.html
/**
* 初始化折线图
*/
function initLine() {
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('m1'));
var option = {
title: {
text: '分公司业绩图',
left: "center",
},
tooltip: {
trigger: 'axis'
},
legend: {
data: [],//后台
bottom: 0
},
toolbox: {
feature: {
saveAsImage: {}
}
},
xAxis: {
type: 'category',
boundaryGap: false,
data: []//后台
},
yAxis: {
type: 'value'
},
series: []//后台
};
$.ajax({
url: "/chart/line/",
type: "get",
dataType: "JSON",
success: function (res) {
if (res.status) {
option.legend.data = res.legend;
option.xAxis.data = res.x_axis;
option.series = res.series_list;
myChart.setOption(option);
} else {
}
}
})
}
后端
urls.py
# ------------------数据统计---------------------------------------------------
path('chart/list/', chart.chart_list),
path('chart/bar/', chart.chart_bar),
path('chart/pie/', chart.chart_pie),
path('chart/line/', chart.chart_line),
chart.py
def chart_line(request): """构造折线图1""" legend = ['上海', '北京'] x_axis = ['1月', '2月', '3月', '4月', '5月', '6月', '7月'] series_list = [ { "name": '上海', "type": 'line', "stack": 'Total', "data": [120, 132, 101, 134, 90, 230, 210] }, { "name": '北京', "type": 'line', "stack": 'Total', "data": [220, 182, 191, 234, 290, 330, 310] }, ] result = { "status": True, "legend":legend, "x_axis": x_axis, "series_list": series_list, } return JsonResponse(result)'运行
访问网页

与Echarts功能相似,但有部分功能不同。
highcharts官网

下载
这里直接使用CDN
<script src="http://cdn.highcharts.com.cn/highcharts/highcharts.js"></script>
urls,py
path('chart/highcharts/', chart.highcharts),
chart.py
def highcharts(request): """highcharts示例""" return render(request,'highcharts.html')'运行
highcharts.html
{% extends 'template.html' %}
{% load static %}
{% block content %}
<div class="container">
<div id="m1" style="width: 600px;height:400px;"></div>
</div>
{% endblock %}
{% block js %}
<div class="container">
<script src="http://cdn.highcharts.com.cn/highcharts/highcharts.js"></script>
<script>
// 图表配置
var options = {
chart: {
type: 'bar' //指定图表的类型,默认是折线图(line)
},
title: {
text: '我的第一个图表' // 标题
},
xAxis: {
categories: ['苹果', '香蕉', '橙子'] // x 轴分类
},
yAxis: {
title: {
text: '吃水果个数' // y 轴标题
}
},
series: [{ // 数据列
name: '小明', // 数据列名
data: [1, 0, 4] // 数据
}, {
name: '小红',
data: [5, 7, 3]
}]
};
// 图表初始化函数
var chart = Highcharts.chart('m1', options);
</script>
</div>
{% endblock %}
访问页面

其他配置与Echarts相同。