[英]Django template not executing js function
我有一個看起來像這樣的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);
}
參數數量無效意味着您的上下文變量之一(可能為answer
)為空白。
您的代碼具有風險,因為Django會將上下文變量轉義為HTML安全而不是JavaScript安全。 我用來解決此問題的一個技巧是將所有參數放入字典中的JS函數,然后將其轉換為JSON並將其用於上下文變量(將其與|safe
過濾器和<![CDATA[
模板中的標記)。
至於show_chart
尚未解決,您可能要確保chart.js
確實在加載中,並且不在某種形式的命名空間中。
看起來series_names
僅作為對象的HTML實體輸出,而沒有適當的__unicode__
方法。 您得到:
show_graph("pie", [<ResponseOption: puddentane>,
解碼后的是:
show_graph("pie", [<ResponseOption: puddentane>, ...
實際需要傳遞給該方法的是什么? 您可能需要考慮如何使{{ series_names }}
輸出,而不只是調用該變量的字符串表示形式。 您目前所生成的是無效的Javascript-瀏覽器的控制台可能會加強這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.