在JavaScript代码中,如何从Python中访问提供给HTML模板的数据?
因此,我有一个python flask应用程序,它路由到一个站点并传递两个列表:在JavaScript代码中,如何从Python中访问提供给HTML模板的数据?,javascript,python,html,flask,Javascript,Python,Html,Flask,因此,我有一个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 %}
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 %}
我曾尝试将python文件中列表的内容循环到不同的容器中,例如
、
和
,并通过文档访问这些内容。getElementById(“”
)以及其他一些尝试,都记不清了
我曾试图在谷歌上找到答案,但没有结果
非常感谢您的帮助,我应该提到,我对这些编码语言和框架还不熟悉,所以如果我缺少的东西是显而易见的,请注意
==新的工作版本===
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>
现在,您已经将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。为此,请使用特殊的tojson
Jinja2过滤器:
<script type="text/javascript">render_chart({{ labels|tojson }}, {{ values|tojson }})'></script>
render_图表({{labels}tojson},{{{values}tojson}})>
嘿!多亏了很多!好的,我理解你的意思:)这是可行的,但我有一个后续问题:当我实现
时,我会遇到语法错误,这些错误告诉我属性赋值和参数表达式是应该的。这可能是什么原因?此外,我的chart.html
通过{extends'index.html}
块从我的index.html
扩展而来,我的index.html
已经有了body
标记。是否可以使用另一个标签来调用我的JS函数?@shurda在html页面底部有脚本块吗?您可以在其中放置以下内容:render_chart({{labels}tojson}},{{values}tojson}})代码>是的,我有一个脚本块,尝试了你的解决方案,效果很好。将其进一步修改为更通用。发布扩展版本供人们查看。再次感谢!谢谢谢谢你的帮助,我真的很感激:)
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
});
}
<script type="text/javascript">render_chart({{ labels|tojson }}, {{ values|tojson }})'></script>