如何在我的JavaScript代码中从Python烧瓶路由访问提供给HTML模板的数据?

舒尔达

所以我有一个python flask应用程序,该应用程序路由到一个站点并传递两个列表:

def chart():
    labels = ['x', 'y', 'z']
    values = [100, 150, 100]
    return render_template('chart.html',
     labels=labels, values=values)

我使用Chart.min.js,然后可以使用列表在我的图形中渲染图形chart.html

{% block body %}
<h1>Test chart</h1>

<canvas id="myChart" width="800" height="400"></canvas>

<p id="caption">chart displaying labels n' values</p>

<script type=text/javascript>

    var ctx = document.getElementById('myChart');

    var names = [
        {% for item in labels %}
            "{{ item }}",
        {% endfor %}
    ];

    var numbers = [
        {% for item in values %}
            {{ item }},
        {% endfor %}
    ];

    var chartData = {
        labels: names,
        datasets: [{
          label: 'values',
           data: numbers
        }]
    };

    var myChart = new Chart(ctx, {
        type: 'line',
        data: chartData
    });

</script>

{% endblock %}

现在可以正常工作,我得到一个漂亮的漂亮图表。然后,我想将我的JavaScript放在我的flask应用程序的静态文件夹中的单独文件中,但是我找不到应该如何访问传递给的列表chart.htlm如果我将一些数据硬编码到JS文件中,则可以很好地呈现图形,但是似乎无法获取python代码提供的数据。

var ctx = document.getElementById('myChart');

// var names = ['x', 'y', 'z'];
// var numbers = [100, 150, 100];

var chartData = {
    labels: names,
    datasets: [{
        label: 'values',
        data: numbers
    }]
};

var myChart = new Chart(ctx, {
    type: 'line',
    data: chartData
});

我试图将列表的内容从python文件循环到不同的容器(例如)中<div><ol><ul>通过document.getElementById("")其他尝试进行访问,但我真的记不清所有内容。

我试图在Google上找到答案,但无济于事。

感谢您的帮助,我应该提到我是这些编码语言和框架的新手,因此请对我遗漏的内容进行明显的监督。

===新的工作版本===

chart.html

<script type="text/javascript">

    window.addEventListener('DOMContentLoaded', (event) => {
        const myChart2 = document.getElementById('ChartOne');
        drawChart(ChartOne, {{ labels| tojson }}, {{ values| tojson }}, ChartType.LINE);

    });

</script>

<div>
    <canvas id="ChartOne" width="800" height="400"></canvas>
    <p id="caption">line chart displaying labels n' values</p>
</div>

script.js

const ChartType = {
    LINE: "line" // add more variables for more chart options
}

function drawEmployeeChart(ctx, labels, values, chartType) {
    var chartData = {
        labels: labels,
        datasets: [{
            label: 'values',
            data: values,
        }]
    };

    var myChart = new Chart(ctx, {
        type: chartType,
        data: chartData
    });
}
吉尼亚提乌斯

现在,您已将JavaScript分离到一个新的js文件中,您必须在此处获取变量。

您可以做的是在.js文件中定义一个包含两个数组的javascript函数:

function render_chart(labels, values)
{
    var ctx = document.getElementById('myChart');

    var chartData = {
        labels: names,
        datasets: [{
            label: 'values',
            data: values
        }]
    };

    var myChart = new Chart(ctx, {
        type: 'line',
        data: chartData
    });
}

然后从chart.html页面调用该函数,但是您必须将从Flask传递的变量转换为json。为此,请使用特殊的tojsonJinja2过滤器:

<script type="text/javascript">render_chart({{ labels|tojson }}, {{ values|tojson }})'></script>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Chart.JS中逗号化提供给图表的数据值?

如何在Express中将静态文件提供给不同的路由?

Angular 2:如何在将其提供给模板之前修改 json 提要

在VS 2013中将代码类中的数据提供给Reporting Services设计器

如何获取文本框输入并将其提供给本机反应中的 axios 我想从输入中获取数据并将其提供给 Axios 中的电子邮件和密码

在Ansible中,如何访问回调插件中提供给剧本的额外参数?

我如何在不提供给/ dev / null的情况下使libcurl的输出静音?

如何在Xamarin应用(Android)中将数据提供给TesnorFlow lite模型?

如何在 Ogre3d 中正确地将数据提供给 Hardwarepixelbuffer?

如何将作为PHP结果创建的字符串提供给我的JavaScript

无法将javascript提供给由ajax加载的数据

如何使用 Python 将数据作为整数提供给 Elasticseach?

提供给routeProvider的调试路由

如何在组件中创建服务实例并将其提供给子级?

如何设置DynamoDB将数据提供给网站?

如何在反应中将css提供给标签标题?

从表中检索数据并提供给网格

是否可以将表格中的数据提供给 wordpress?

嗨,我是 Spring Boot 的新手。我需要创建一个 rest 模板客户端,它可以从提供给我的 api 链接中获取 oauth2 访问令牌

我们如何在PyTorch中将线性层的输出提供给Conv2D?

我如何在不让函数修改所述变量的原始值的情况下将变量提供给函数?

当我尝试通过 Pandas 将原始数据 txt 提供给 python 时,为什么会出现 NaN?

Angular Typescript 订阅值为空,但数据仍提供给模板

我如何有效地将2d python列表提供给C ++扩展模块

在Grafana中,如何使用我创建的变量并将其作为值提供给查询图的查询?

在python中将输入提供给终端

Django静态文件未提供给HTML-EMail模板

如何在 Python 中将 OpenCV 图像提供给经过训练的 CNN 模型(添加新维度)?

如何在Java中设计一个可以检查提供给它的允许值的泛型类?