使用Django显示Google图表

6

我在Django中生成了一个名为data的变量,格式如下:

data = [['100',10],['90',9],['80',8]]

我已经使用render_to_response将其传递给我的模板:

return render_to_response('template.html', {
                                            'data': data,
                                            },
                                            context_instance=RequestContext(request))

在模板头部,我放置了一个调用Google Charts生成折线图的代码:
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load('visualization', '1.0', {'packages':['corechart']});
google.setOnLoadCallback(drawChart);
function drawChart() {
  var data = new google.visualization.DataTable();
  data.addColumn('string', 'Number');
  data.addColumn('number', 'Number/10');
  data.addRows( {{ data }} );

var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
chart.draw(data, {width: 400, height: 240, title: "Numbers"});
}
</script>

当我这样做时,什么都没有显示。如果我从data中删除字符串并再次尝试,则图表将显示,但显然没有x轴标签。

我也尝试使用arrayToDataTable函数添加数据:

var data = google.visualization.arrayToDataTable([
      ['Number', 'Number/10'],
      {% for datum in data %}
          {{ datum }},
      {% endfor %}],
      false);

但是这样仍然无法显示任何图表。
你有什么建议可以改变其中一个方法,或尝试另一种方法来使x轴标签出现吗?

我已确认,如果删除字符串,arrayToDataTable方法也会显示。使用任一方法都可以显示多条曲线。 - Sinidex
1个回答

12
您需要关闭结果的自动转义。可以通过添加安全过滤器来实现:
data.addRows( {{ data|safe }} );

或者

{% autoescape off %}
[...]
    {{ data }}
[...]
{% endautoescape %}

我的建议是,如果你能够安装额外的包,可以使用以下其中一个封装库:


安全数据提示看起来很不错,但我已经尝试了各种组合(只有|safe,|safe与自动转义,两种数据加载方法等),但都没有成功。Google图表看起来很有趣,我会试一试。感谢您的建议。 - Sinidex
撤销之前的话,|safe 和你所指出的第一种数据方法兼容。我有另一个错误导致了结果不明确。谢谢! - Sinidex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接