La plantilla de Django no ejecuta la función js

Tengo una plantilla de django que se parece a esto:

<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>

donde show_graph es una función en chart.js. Sin embargo, pycharm me da uno de dos errores, ya sea: función no resuelta o método show_graph (), o número inválido de parámetros pasados: esperado 4

y la función claramente no está siendo llamada.

Estoy un poco confundido en cuanto a si puedo o no pasar las variables de plantilla a una función js ...

¿Alguien tiene alguna idea?

EDIT:

esto genera

<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>

donde se ve chart.js (valores codificados temporalmente para la resolución de problemas, y debe mencionarse que $ .plot también da un error de función no resuelto):

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);
}

preguntado el 27 de agosto de 11 a las 23:08

¿Cómo se ve el marcado que genera este código? (Ver fuente en el navegador) -

Secundando la necesidad de mostrar la fuente, específicamente, pegue el show_graph línea que se genera. -

2 Respuestas

Un número de parámetros no válido significa una de sus variables de contexto, probablemente answer, estaba en blanco.

Su código es arriesgado porque Django escapará de sus variables de contexto para ser seguro para HTML, no para JavaScript. Un truco que utilizo para evitar esto es poner todos los parámetros a una función JS en un diccionario, luego convertirlo a JSON y usarlo para la variable de contexto (usándolo con el |safe filtro, y el <![CDATA[ marcado en la plantilla si es necesario).

En cuanto a los show_chart no se resuelve, es posible que desee asegurarse de chart.js realmente se está cargando, y que no está en un espacio de nombres de alguna forma.

Respondido 28 ago 11, 04:08

¿Cómo haría para verificar si chart.js realmente se está cargando? Ese puede ser el problema aquí. - Colleen

Utilice herramientas de depuración con su navegador. En Firefox, instale Firebug y enciéndalo. En Safari, habilite el menú Desarrollador en Preferencias. Hay una pestaña de Recursos o equivalente que muestra cada cosa cargada para la página y cualquier código de estado. - Mike DeSimone

Parece que series_names solo se genera como las entidades HTML de un objeto sin un __unicode__ método. Estas obteniendo:

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

Que, decodificado, es:

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

¿Qué es lo que realmente necesita pasar al método? Probablemente necesites pensar en cómo quieres {{ series_names }} para ser salida, en lugar de simplemente llamar a la representación de cadena de esa variable. Lo que está generando en este momento no es Javascript no válido; la consola de su navegador probablemente reforzará este punto.

Respondido 28 ago 11, 04:08

Abordaré ese problema más tarde, gracias. Sin embargo, en este momento, en realidad no estoy usando series_names, tengo los valores codificados y todavía no funciona. Colleen

Eso es irrelevante. Ambos [&lt;ResponseOption: puddentane&gt;, y [<ResponseOption: puddentane>, son JavaScript no válidos y no deberían estar allí. Si no los está usando, reemplácelos {{ series_names }} con []. - Mike DeSimone

Sam y Mike son los ganadores: el javascript no válido impedía la ejecución del código. ¡GRACIAS! - Colleen

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.