【问题标题】:How to refresh chart in django without refreshing whole page如何在 django 中刷新图表而不刷新整个页面
【发布时间】:2019-09-05 02:09:30
【问题描述】:

我是 Django 新手,我使用 chart.js 来填充 HTML 图表。我想刷新图表而不加载 HTML 本身。

HTML 图表如下所示

上面HTML的URL对应的视图在下面

**Views.py**

   from __future__ import unicode_literals

from django.shortcuts import render
from django.views.generic import TemplateView
# Create your views here.
def dashboard(request):
    if request.is_ajax():
        print "this is ajax request inside dashboard function"
        pass_tc=29
        failed_tc=25
        inprogress_tc=25
        data = {'data':[pass_tc, failed_tc, inprogress_tc]}
        request.GET.get('data')
        print JsonResponse(data)
        return JsonResponse(data)

    context = {'data':[500,100,50]}
    template='dashboard.html'

    return render(request,template,context)



]

在 HTML 中,我使用了 Chart.js 的 updateChart() 功能

<button class='btn btn-success' onclick="updateChart()">Refresh</button>

         <script>
        var ctx = document.getElementById('myChart').getContext('2d');
        var chart = new Chart(ctx, {
        // The type of chart we want to create
        type: 'bar',

        // The data for our dataset
        data: {
        labels: ['Pass', 'Fail', 'Inprogress'],
        datasets: [{
            label: 'Results',
            //backgroundColor: 'rgb(255, 99, 132)',
            //borderColor: 'rgb(255, 99, 132)',
            backgroundColor:[
            'green','Brown','orange'],
            data: [10, 10,15]
        }]
        },

    // Configuration options go here
        options: {},

        });
        function updateChart(){

   $.get("/dashboard/",{data:response.JsonResponse(data)}, function(data, status)
    {
        //console.log(data)

        chart.data.datasets[0].data={{data}};
        chart.update();
    }


        )


        };

在服务器端我可以看到下面的响应

this is ajax request inside dashboard function
Content-Type: application/json

{"data": [29, 25, 25]}
[15/Apr/2019 18:52:12] "GET /dashboard/ HTTP/1.1" 200 22

所以 Ajax 请求正在获取数据。但是,我的图表没有填充这些数据。

它使用 View.py 中定义的非 Ajax 数据,也显示在图中 即

{'data':[500,100,50]}

我在我的 Ajax 请求中做错了什么。

【问题讨论】:

    标签: javascript jquery html django chart.js


    【解决方案1】:

    当 django 将渲染的模板返回给客户端时,之后将无法进行任何更改。这就是为什么您的图表没有反映在 django 中所做的任何更改。

    如果您需要使用新数据更新图表,最简单的解决方案是使用 AJAX 请求。

    • 用户按下刷新按钮
    • Javascript 向 django API 点发送 GET 请求
    • Django 以 JSON 格式将新值返回给用户
    • Javascript 将使用新值更新图表

    创建另一个端点,如下所示:

    from django.http import JsonResponse
    
    def dashboard_ajax_chart_data(request):
        pass_tc=500
        failed_tc=99
        inprogress_tc=50
        data = {'data':[pass_tc, failed_tc, inprogress_tc]}
        return JsonResponse(data)
    

    在您的 javascript 代码中创建函数,如下所示:

    jQuery('.refresh-button').click(function(){
            jQuery.getJSON("/dashboard_ajax/", function(data, status)
            {
                chart.data.datasets[0].data = data.data;
                chart.update();
            }
            )
    });
    

    并在您单击刷新按钮时执行此功能。

    我没有使用 chart.js 的适当经验,但请使用本指南更新您的图表。 https://www.chartjs.org/docs/latest/developers/updates.html

    【讨论】:

    • 我已经按照您的建议编辑了我的代码,但仍然是同样的问题!!我在原始问题中更新的所有相关信息。
    • @pankajmishra 您是否向urls.py 添加了新端点? django 服务请求吗?您是否在 javascript 中收到新数据?使用console.log(data) 对其进行调试。
    • 那是因为你的urls.py 对两个端点使用了相同的函数。
    • 我已经编辑了我的代码和问题,看起来在从 Ajax 查询中获取响应时出现了一些问题。
    • 试用 $.getJSON 的版本 - 您的响应可能不会被解释为 JSON
    猜你喜欢
    • 2017-06-18
    • 2014-01-10
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多