La soluzione accettata non funziona (? Più) a causa del ramoscello autoescaping uscite, cambiare tutto il JSON "
con "
;
equivalente sarebbe ora necessario utilizzare il filtro raw
:
<script type="text/javascript">
nickname = {{ profile.nickname|json_encode()|raw }}; // Nickname will be a string
// 2nd solution if you have more informations related to profile
profile = {
nickname: {{ profile.nickname|json_encode()|raw }},
lastname: {{ profile.lastname|json_encode()|raw }}
};
// Profile is now an object with a nickname property.
// use profile.nickname on your javascripts
</script>
Detto, stampando direttamente il grezzo JSON in JavaScript può causare alcuni problemi, ha in questa configurazione:
<script>
var myvar = {{ '{"test": "</script>"}'|raw }};
</script>
Il tag </script>
nel JSON sarebbe interpretato dal parser HTML, causando uno script rotto.
Il modo veramente corretto per fare questo sarebbe piuttosto quello di stampare il JSON come stringa di escape, per poi analizzarlo all'interno dello script js:
<script>
var myvar = JSON.parse('{{ '{"test": "</script>"}'|e('js') }}');
</script>
per esempio ho questo var in ramoscello {{profile.nickname}}, se voglio usare il valore di {{profile.nickname}} all'interno del mio javascript? – Barno
Ho aggiornato la mia risposta. – zapcost
grazie per la risposta! – Barno