Django模板不执行js函数

时间:2011-08-27 23:50:13

标签: javascript django templates function parameters

我有一个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", [&lt;ResponseOption: puddentane&gt;, &lt;ResponseOption: down the lane&gt;], [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);
}

2 个答案:

答案 0 :(得分:1)

参数数量无效意味着您的某个上下文变量(可能为answer)为空白。

您的代码存在风险,因为Django会将您的上下文变量转义为HTML安全,而不是JavaScript安全。我用来解决这个问题的一个技巧是将所有参数放到字典中的JS函数中,然后将其转换为JSON并将其用于上下文变量(将其与|safe过滤器一起使用,以及{{如果需要,可以在模板中添加1}}。

至于<![CDATA[未解决,您可能希望确保show_chart确实正在加载,并且它不在某种形式的命名空间中。

答案 1 :(得分:1)

看起来series_names只是作为没有正确的__unicode__方法的对象的HTML实体输出。你得到了:

show_graph("pie", [&lt;ResponseOption: puddentane&gt;,

解码的是:

show_graph("pie", [<ResponseOption: puddentane>, ...

实际需要传递给方法的是什么?您可能需要考虑如何输出{{ series_names }},而不是仅仅调用该变量的字符串表示。你目前正在生成的是无效的Javascript - 浏览器的控制台可能会强调这一点。