我有一个django模板,如下所示:
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js" type="text/javascript"></script>
<script src="{{ STATIC_URL }}js/jquery.flot.js"></script>
<!--<script src="c:/src/project/scraper/collegedata/templates/chart.js" type="text/javascript"></script>-->
<script src="{{ STATIC_URL }}js/chart.js" type="text/javascript"></script>
</head>
<body>
<div id="chart1" style="width:600px;height:300px"></div>
<script>
show_graph("{{ chart_type }}", {{ series_names }}, {{ data }}, {{ answer }});
</script>
<form action="start">
<input type="submit" value="Back to Questions" />
</form>
</body>
</html>
其中show_graph是chart.js中的一个函数。但是,pycharm给了我两个错误之一: 未解决的函数或方法show_graph(),或 传递的参数数量无效:预期4
并且该功能显然没有被调用。
关于我是否甚至可以将模板变量传递给js函数,我有点困惑......
有没有人有任何见解?
编辑:
这会生成
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js" type="text/javascript"></script>
<script src="/static/js/jquery.flot.js"></script>
<!--<script src="c:/src/project/scraper/collegedata/templates/chart.js" type="text/javascript"></script>-->
<script src="/static/js/chart.js" type="text/javascript"></script>
</head>
<body>
<div id="chart1" style="width: 600px; height: 300px;"></div>
<script>
show_graph("pie", [<ResponseOption: puddentane>, <ResponseOption: down the lane>], [1, 0], 0);
</script>
<form action="start">
<input value="Back to Questions" type="submit">
</form>
</body></html>
其中chart.js看起来像(临时硬编码的值用于故障排除,应该提到$ .plot也会给出一个未解决的函数错误):
function show_graph(charttype, series_names, data, answer_index){
var data = [2000, 50, 400, 200, 5000];
var data3 = [
{ label: "my cat", data: 10, color: 'rgb(85, 96, 42)'},
{ label: "my friends", data: 20, color: 'rgb(105, 118, 52)'},
{ label: "my boyfriend", data: 30, color: 'rgb(125, 141, 62)'},
{ label: "my job", data: 30, color: '#42215F'},
{ label: "food", data: 10, color: 'rgb(145, 164, 72)'},
{ label: "social skills", data: 0, color: 'rgb(166, 189, 82)'}
];
alert("in chart.js");
var charttype = "pie";
var type = {};
type[charttype] = {show: true};
var chart_options = {};
chart_options["series"]=type;
var plot = $.plot($("#chart1"), data3, chart_options);
}
答案 0 :(得分:1)
参数数量无效意味着您的某个上下文变量(可能为answer
)为空白。
您的代码存在风险,因为Django会将您的上下文变量转义为HTML安全,而不是JavaScript安全。我用来解决这个问题的一个技巧是将所有参数放到字典中的JS函数中,然后将其转换为JSON并将其用于上下文变量(将其与|safe
过滤器一起使用,以及{{如果需要,可以在模板中添加1}}。
至于<![CDATA[
未解决,您可能希望确保show_chart
确实正在加载,并且它不在某种形式的命名空间中。
答案 1 :(得分:1)
看起来series_names
只是作为没有正确的__unicode__
方法的对象的HTML实体输出。你得到了:
show_graph("pie", [<ResponseOption: puddentane>,
解码的是:
show_graph("pie", [<ResponseOption: puddentane>, ...
实际需要传递给方法的是什么?您可能需要考虑如何输出{{ series_names }}
,而不是仅仅调用该变量的字符串表示。你目前正在生成的是无效的Javascript - 浏览器的控制台可能会强调这一点。