Javascript 未捕获的语法错误:意外的标记&;在呈现Django模板时

Javascript 未捕获的语法错误:意外的标记&;在呈现Django模板时,javascript,python,django,django-templates,Javascript,Python,Django,Django Templates,我试图使用“”绘制一个折线图,并从Django视图传递数据 这是我的模板 <head> <script type="text/javascript" src="https://www.google.com/jsapi"></script> <script type="text/javascript"> google.load("visualization", "1", {packages:["corechart"]});

我试图使用“”绘制一个折线图,并从Django视图传递数据

这是我的模板

<head>
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">
      google.load("visualization", "1", {packages:["corechart"]});
      google.setOnLoadCallback(drawChart);

      function drawChart() {

        data = {{analytics_data}}
        var data = google.visualization.arrayToDataTable(data);

        var options = {
          title: 'Facebook Analytics'
        };

        var chart = new google.visualization.LineChart(document.getElementById('chart_div'));

        chart.draw(data, options);
      }
    </script>
  </head>
  <body>
       <div id="chart_div" style="width: 900px; height: 500px;"></div>
  </body>
</html>
分析_数据应以格式返回数据

[['Day', 'Likes', 'Share', 'Comments'],
 ['31 Aug',  5,      8,    10         ],
 ['01 Sep',  10,      5,    13         ]]
但在html模板的呈现过程中,它以给定的格式提供数据

[[&#39;Day&#39;, &#39;Likes&#39;, &#39;Share&#39;, &#39;Comments&#39;], 
  [u&#39;01Sep&#39;, 2, 2, 2]]
意味着它在每个字符串中添加u'',因此我得到错误“未捕获语法错误:意外标记&”,并且我的temlate没有返回折线图。
如何删除此错误?

您应该首先将列表转换为正确的JSON,如下所示:

import json

def show_fb_analytics(request):
    ...
    return render(request, 'fbchart.html', {'analytics_data': json.dumps(analytics_data)})
然后用“安全”过滤器输出,这样Django的逃逸引擎就不会干预:

{{analytics_data|safe}}

转换为JSON将以JavaScript数组文本的形式输出列表(而不是Python列表文本;虽然两者非常相似,但实际上是不同的,在您的例子中,Python有
u
前缀,而JS没有,等等),使用
safe
过滤器将阻止Django的模板引擎将
'
转换为
&39

@Spc_555的答案是正确的,但您也可以在视图中将JSON标记为安全的:

导入json
从django.utils.safestring导入marksafe
def show_fb_分析(请求):
...
返回呈现(请求'fbchart.html',{'analytics_data':mark_safe(json.dumps(analytics_data))})

谢谢瓦西里;我将我的列表转换为正确的JSON,但仍然得到相同的错误。现在,在渲染之后,将添加“替换”39。
{{analytics_data|safe}}