簡體   English   中英

Django模板不執行js功能

[英]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", [&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);
}

參數數量無效意味着您的上下文變量之一(可能為answer )為空白。

您的代碼具有風險,因為Django會將上下文變量轉義為HTML安全而不是JavaScript安全。 我用來解決此問題的一個技巧是將所有參數放入字典中的JS函數,然后將其轉換為JSON並將其用於上下文變量(將其與|safe過濾器和<![CDATA[模板中的標記)。

至於show_chart尚未解決,您可能要確保chart.js確實在加載中,並且不在某種形式的命名空間中。

看起來series_names僅作為對象的HTML實體輸出,而沒有適當的__unicode__方法。 您得到:

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

解碼后的是:

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

實際需要傳遞給該方法的是什么? 您可能需要考慮如何使{{ series_names }}輸出,而不只是調用該變量的字符串表示形式。 您目前所生成的是無效的Javascript-瀏覽器的控制台可能會加強這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM