var userName = {{name}}
SORT lorsque vous affichez la source HTML comme:
var userName = Bob
Ce qui est une erreur évidente: citations manquantes. Mais, en mettant simplement des citations autour de lui:
var userName = '{{name}}';
n'est pas assez bon pour le cas général. Que faire si la chaîne contient un caractère de citation, une barre oblique inverse ou un saut de ligne? Dans le meilleur des cas, votre application tombe. Dans le pire des cas, trou de sécurité de cross-site-scripting. De plus, un caractère &
ou <
dans le nom ne s'affichera pas correctement non plus, car Django autoescape supposera probablement qu'il se trouve dans un contexte HTML non-CDATA et qu'il les ignorera.
Utilisez le filtre escapejs
à la place:
var userName = '{{name|escapejs}}';
Vous pouvez également utiliser un encodeur JSON pour transformer tout type de données de base dans le format littéral JavaScript, pas seulement la chaîne. Il y a json dans la bibliothèque standard de 2.6, mais notez que cela n'échappe pas au caractère <
dans les chaînes, donc pour injecter du code dans un élément de script, vous devez l'échapper manuellement pour empêcher une séquence </script>
de terminer prématurément l'élément CDATA.
Le fichier javascript est-il rendu via l'instance django ou un serveur Web (lighttpd)? –