2011-12-30 13 views
17

Questa domanda deve essere ovvia ma non riesco a capirlo.Come posso passare le mie variabili di contesto a un file javascript in Django?

In un modello, collego a un file js nella mia directory multimediale. Da quel file, vorrei accedere a una variabile di contesto come {{my_chart}}.

Ma la sintassi è diversa ?? Grazie!!

+0

Eventuali duplicati di [Variabili Template Django e Javascript ] (http://stackoverflow.com/questions/298772/django-template-variables-and-javascript) – Cory

risposta

16

Non credo sia possibile in questo modo. Se si desidera accedere ad alcuni dati forniti dalla vista, è necessario passarlo alla funzione js.

Esempio

js di file:

my_cool_js_function(some_param){ 
    // do some cool stuff 
} 

vista

// some html code 

my_cool_js_function({{param}}) 

Spero che questo aiuti :)

+0

Ricorda di dare un'occhiata a [{{value | escapejs}}] (https://docs.djangoproject.com)/it/dev/ref/templates/builtins/# escapejs) – danihp

15

Oltre alla risposta di Andrzej Bobak, è anche possibile generare una variabile globale in Javascript dal tuo modello. Ad esempio, il modello potrebbe generare codice come questo:

<script> 
    var my_chart = {{ the_chart }}; 
</script> 

Lo script potrebbe quindi fare riferimento alla my_chart.

+0

@Brian_Neal come funziona? Ad esempio, puoi semplicemente fare qualcosa come 'console.log (my_chart);' nel file javascript, e non devi dichiararlo da nessuna parte? – YPCrumble

+0

@YPCrumble È dichiarato nell'html generato da Django. Se lo stesso file html include anche un file javascript esterno, tale javascript può fare riferimento a tale variabile. –

+1

Questa è una risposta brillante, purché dichiari la variabile globale prima di importare il tuo file js, dovresti stare bene. Grazie. –

3

Vorrei anche aggiungere, perché mi sono imbattuto nell'errore un paio di volte che se la variabile Python è un oggetto che sarà gettare un errore di sintassi a meno che non si è messo tra virgolette, in altre parole, all'interno del tuo modello,

<script> 
    var my_var = '{{ python_object|escapejs }}'; 
</script> 

Inoltre, prima di mettere quell'oggetto nel contesto, è meglio prima serializzarlo su JSON, altrimenti si finirà per dover eseguire l'analisi delle stringhe. Ho trovato anche che gli oggetti data dovevano essere convertiti in stringhe prima di questo passaggio.

import jsonpickle 

context['python_object'] = jsonpickle.encode(python_object) 

E, infine, in JS è quindi possibile scorrere l'oggetto correttamente e utilizzare i valori come probabilmente avrebbe in pitone facendo:

var my_var_parsed = jQuery.parseJSON(my_var); 
Problemi correlati