未捕获的语法错误:渲染Django模板时遇到意外的符号&
我正在尝试使用 "https://www.google.com/jsapi" 绘制一个折线图,并从 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>
views.py
def show_fb_analytics(request):
analytics_data = [["Day", "Likes", "Share", "Comments"]]
data = FbAnalytics.objects.all()
for item in data:
date = item.date
likes = item.likes
comments = item.comments
shares = item.shares
lst = [date, likes, comments, shares]
analytics_data.append(lst)
return render(request, 'fbchart.html', {'analytics_data':analytics_data})
analytics_data 应该返回特定格式的数据
[['Day', 'Likes', 'Share', 'Comments'],
['31 Aug', 5, 8, 10 ],
['01 Sep', 10, 5, 13 ]]
但是在渲染 HTML 模板时,它返回的数据格式是这样的
[['Day', 'Likes', 'Share', 'Comments'],
[u'01Sep', 2, 2, 2]]
这意味着它在每个字符串中都添加了 u'',这导致我遇到了错误"未捕获的语法错误:意外的标记 &",我的模板没有返回折线图。请问我该如何解决这个错误?
2 个回答
1
@Spc_555的回答是对的,但你也可以在视图中把JSON标记为安全:
import json
from django.utils.safestring import marksafe
def show_fb_analytics(request):
...
return render(request, 'fbchart.html', {'analytics_data': mark_safe(json.dumps(analytics_data))})
9
你应该先把你的列表转换成正确的JSON格式,像这样:
import json
def show_fb_analytics(request):
...
return render(request, 'fbchart.html', {'analytics_data': json.dumps(analytics_data)})
然后用“safe”过滤器输出,这样Django的转义引擎就不会干扰了:
{{analytics_data|safe}}
把列表转换成JSON后,会把它输出为JavaScript的数组格式(而不是Python的列表格式;虽然这两者看起来很相似,但实际上是不同的。在你的情况下,Python的列表前面会有u
前缀,而JavaScript没有等等),而使用safe
过滤器可以防止Django的模板引擎把'
转换成'
。