Javascript 未捕获的语法错误:意外标记';%';,使用单独的js文件时发生烧瓶错误

Javascript 未捕获的语法错误:意外标记';%';,使用单独的js文件时发生烧瓶错误,javascript,json,flask,Javascript,Json,Flask,我正在开发一个flask应用程序,当我试图在我的html页面中链接我的js文件时,我遇到了上面的错误 但是,当我在HTML文件本身的标记下包含js逻辑时,我看不到错误,页面按预期呈现 导致错误的方法 JS:存储在/static/JS/alv.JS中 var lineData1 = { labels : [ {% for item in mob %} //Error on this line Uncaught SyntaxError: Unexpected token '%' "{{ i

我正在开发一个flask应用程序,当我试图在我的html页面中链接我的js文件时,我遇到了上面的错误

但是,当我在HTML文件本身的标记下包含js逻辑时,我看不到错误,页面按预期呈现

导致错误的方法

JS:存储在/static/JS/alv.JS中

var lineData1 = {
labels : [
{% for item in mob %} //Error on this line Uncaught SyntaxError: Unexpected token '%'
"{{ item }}",
{% endfor %}
],

datasets : [{
fill: {
target: 'origin',
above: 'rgb(255, 0, 0)',   // Area will be red above the origin
below: 'rgb(0, 0, 255)'    // And blue below the origin
},
borderColor :  "rgba(0,175,233)",
fillColor:  "rgba(0,175,233)",
strokeColor: "rgba(151,187,205,1)",
pointColor: "rgba(151,187,205,1)",
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(151,187,205,1)",
bezierCurve : true,
data : [
{% for item in apo %}
{{ item }},
{% endfor %}]
}
]
};

Chart.defaults.global.animationSteps = 50;
Chart.defaults.global.tooltipYPadding = 16;
Chart.defaults.global.tooltipCornerRadius = 0;
Chart.defaults.global.tooltipTitleFontStyle = "normal";
Chart.defaults.global.tooltipFillColor = "rgba(0,0,0,0.8)";
Chart.defaults.global.animationEasing = "easeOutBounce";
Chart.defaults.global.responsive = false;
Chart.defaults.global.scaleLineColor = "black";
Chart.defaults.global.scaleFontSize = 16;


steps = 5

/*Chart display options*/
var config1 =  {
type : "line",
data : lineData1,
scaleOverride: false,
scaleSteps : 10,
scaleStepWidth : 4,
scaleStartValue: 0,
scaleShowVerticalLines: true,
scaleShowGridLines : true,
barShowStroke : true,
scaleShowLabels: true,
bezierCurve: true,
options: {
title: {
display: true,
text: ['ATL_60K NoStress Blended','Attrition per Open(%)']
},
legend : { display : false },
responsive : true,
scales:{
xAxes:[{
display : true,
ticks: {
autoSkip: true,
maxTicksLimit: 20
},
scaleLabel: {
display : true,
labelString : 'MOB'
}
}],
yAxes:[{
display : true,
scaleLabel: {
display : true,
labelString : 'Attrition Rate'
}
}]
}
},
plugins: {
datalabels: {
display: false,
}
}
};
/* get chart canvas */
var attr_chart = document.getElementById("attr_line").getContext("2d");
/* draw charts */
var attr_line = new Chart(attr_chart,config1);
/* Load each chart and hide() the tab immediately. */
$('#tab1').hide();
$('#tab1_btn').on('click',function(){
$('#tab1').show();
HTML:/templates/alv.HTML

<!DOCTYPE html>
<html lang="en">

<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<script src='https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js'></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link rel= "stylesheet" type= "text/css" href= "{{ url_for('static',filename='styles/nav-bar.css') }}">
</head>

<body>
  <center>

<div class="navbar">
  <a href="/">Home</a>
  <a href="/alv">ALV</a>
  <div class="dropdown">
  <button class="dropbtn">ACE
    <i class="fa fa-caret-down"></i>
  </button>
  <div class="dropdown-content" id="myDropdown">
    <a href="#">Partner 1</a>
    <a href="#">Partner 2</a>
    <a href="#">Partner 3</a>
  </div>
  </div>
</div>

  <center>
    <h1>{{ title }}</h1>

<button id="tab1_btn">Attrition per Open</button>
<div id="tab_cover"> </div>
<div id="tabs">
    <div id="tab1" class="tab">
        <canvas id="attr_line" class="chart" width="400" height="300"></canvas>
    </div>
</div>

<script src="{{url_for('static', filename='js/alv.js')}}"></script>
  </center>
</body>
</html>

王牌
{{title}}
每次开放的损耗
当我使用上述方法(即使用HTML中的链接从外部位置调用js文件)时,我会遇到错误

但是,如果我在标记中包含整个js逻辑,它就可以正常工作

希望我明白了。请帮帮我


谢谢

出现此问题是因为您不能在不是由flask渲染的文件中使用Jinja模板,而该文件是静态文件。 在这个问题中,解释了在外部js中使用flask变量的几种方法。

问题解释
当您使用
{%}
{{}
时,html或浏览器无法理解此代码,因此当烧瓶呈现它时,它会将这些逻辑和变量转换为html。但是对于这个烧瓶,您需要知道您正在呈现一个包含Jinja标记的文件。我们在调用
render\u template()
并在其中传递html文件时执行此操作。但是对于js文件,我们不会告诉flask我们正在呈现一个js文件,因为在大多数情况下,它用于客户端编码,所以flask不需要知道这一点。但在某些情况下,如您的情况,您必须在js中使用flask变量。不幸的是,没有直接的方法可以做到这一点,因此我们必须以黑客(ish)的方式来做到这一点,正如您在该帖中看到的那样。

一些评论将非常有用,而不仅仅是简单的向上/向下投票。如果不这样做,则无法解决问题:)使用%include并将my js放入templates文件夹已经奏效。但我还是不明白你的解释provided@Sai对不起,我还没有解释问题的原因。我已经编辑了我的答案。希望有帮助:)那有帮助,谢谢:)。那么有正确的方法吗?在我这样的情况下,有人会怎么做。或者还有其他更好的方法吗?我认为在脚本标记中分配变量,然后在外部js文件中使用这些变量(该线程中的最后一个答案)就可以了。我还没有在flask中做过任何严肃的js工作,所以我不能推荐一个更好的方法,但我仍然认为最后一个是好的。还有一件事,我不建议将js文件移动到templates文件夹。