python - 如何使用 Django 和 Chart.js 创建动态图表?
问题描述
我正在创建一个网页,并希望包含一个显示温度随时间演变的图表。
温度数据每秒钟保存在数据库中。Django 检索此数据并将其传递给模板。
姜戈:
def Dashboard(request):
temp = Info.objects.using('wings').filter(localisation ='Wing_1').order_by('-time')
time1 = []
temperature = []
for dataset in temp :
time1.append(dataset.time.strftime("%Hh%M"))
temperature.append(dataset.temp_wing)
time1 = time1[:60]
temperature = temperature[:60]
time1.reverse()
temperature.reverse()
context = {
'time1': time1,
'temperature': temperature,
}
return render(request, 'Dashboard/dashboard.html',context)
模板 :
<!DOCTYPE html>
{% load static %}
<canvas id="myChart" width="400" height="200"></canvas>
<script src="{% static 'Dashboard/js/Chart.min.js' %}"></script>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: {{time1|safe}},
datasets: [
{label: 'Wing 1 temperature', data : {{temperature|safe}}, backgroundColor:['rgba(54, 162, 235, 0.2)'], borderColor: ['rgba(54, 162, 235, 1)'], borderWidth: 1}
]},
options: {
scales: { yAxes: [{ ticks: { beginAtZero: false }}]}
}
});
ChartUpdate(function(){
myChart.data.datasets[0].data = {{temperature|safe}};
myChart.data.labels = {{time1|safe}};
myChart.update();
}, 5000);
</script>
该图表使用数据库的值正确呈现。但我曾期望ChartUpdate
模板中的函数会使用数据库中新保存的值自动更新图形,但它似乎不起作用......
有没有办法在不重新加载页面的情况下使用数据库的新值自动更新图表的值?
解决方案
感谢 drec4s 的评论,我能够解决我的问题!
这里的视图文件:
def AutoUpdate(request):
temp = Info.objects.using('wings').filter(localisation ='Wing_1').order_by('-time')
time1 = []
temperature = []
for dataset in temp :
time1.append(dataset.time.strftime("%Hh%M"))
temperature.append(dataset.temp_wing)
time1 = time1[:60]
temperature = temperature[:60]
time1.reverse()
temperature.reverse()
context = {
'time1': time1,
'temperature': temperature,
}
return JsonResponse(context)
以及模板中的脚本部分:
setInterval(function(){
$.ajax({
url:'/Dashboard/AutoUpdate',
success: function(test){
myChart.data.datasets[0].data = test.temperature;
myChart.data.labels = test.time1;
myChart.update();
}
});
}, 5000);
推荐阅读
- file - PythonAnywhere 中的 Flask 找不到带有西班牙语字符的文件名
- encryption - 由于名为 CERBER 攻击的勒索软件而加密的数据
- html - node.js express - 在发布路由中看不到来自发布表单的数据
- algorithm - 有两个算法在 f(t) 和 g(t) 期间执行,你能证明 f(t) = O(g(t)) 吗?如何?
- oauth-2.0 - B2C 返回的 Token 没有被 JWT.MS 解码
- java - J2Mod - I/O 异常 - 读取失败
- kotlin - call.enqueue onResponse 返回 null
- mongodb - MongoDB 分片集群中的文档计数错误
- google-app-engine - gcloud app deploy 无法灵活构建
- android - 将当前 ItemId 从 RecyclerAdapter 传递给不同的类