Шаблон Django не выполняет функцию js - PullRequest
4 голосов
/ 28 августа 2011

У меня есть шаблон 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 ]

1 голос
/ 28 августа 2011

Похоже, series_names просто выводится в виде HTML-объектов объекта без правильного __unicode__ метода.Вы получаете:

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

Что расшифровывается как:

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

Что на самом деле нужно передать в метод?Вам, вероятно, нужно подумать о том, как вы хотите, чтобы {{ series_names }} выводился, а не просто вызывать строковое представление этой переменной.То, что вы генерируете на данный момент, является недопустимым Javascript - консоль вашего браузера, вероятно, подкрепит эту точку.

1 голос
/ 28 августа 2011

Неверное количество параметров означает, что одна из ваших переменных контекста, вероятно, answer, была пустой.

Ваш код рискован, потому что Django избежит, что ваши переменные контекста будут безопасны для HTML, а не для JavaScript.Один прием, который я использую, чтобы обойти это, - поместить все параметры в функцию JS в словаре, затем преобразовать ее в JSON и использовать ее для переменной контекста (используя ее с фильтром |safe и разметкой <![CDATA[).в шаблоне, если необходимо).

Что касается show_chart, которое не разрешается, вы можете убедиться, что chart.js действительно загружается, и что оно не находится в пространстве имен какой-либо формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...