2008-09-30 6 views
1

application Mon Django a une table de personne, qui contient le texte suivant dans un champ nommé "détails":Pourquoi Django n'échappera-t-il pas automatiquement mes tags <script>?

<scripts> alert ('Bonjour'); </script >

Quand j'appelle PersonForm.details dans mon modèle, la page rend le scénario en conséquence < > (alias, une alerte avec le mot "Bonjour" est affiché). Je suis confus par ce comportement parce que j'ai toujours pensé Django 1.0 autoescaped le contenu du template par défaut.

Une idée de ce qui se passe ici?

MISE À JOUR: Voici l'extrait de mon modèle. Rien terriblement sexy:

{{ person_form.details }} 

MISE À JOUR 2: J'ai essayé "échapper", "force évasion", et "escapejs". Aucun de ces travaux.

Répondre

4

Vous devez marquer les valeurs comme | Je pense en toute sécurité (je devine que vous remplissez la valeur de la base de données ici()?):

{{ value|safe }} 

Pouvez-vous poster un échantillon du modèle? Pourrait rendre plus facile de voir ce qui ne va pas

[Modifier] ..ou vous dites que vous voulez pour échapper aux valeurs (les sécuriser)? Avez-vous essayé échapper manuellement le champ:

{{ value|escape }} 

[Edit2] Peut-êtreescapejs from the Django Project docs est relevent:

escapejs 

New in Django 1.0. 

Escapes characters for use in JavaScript strings. This does not make the string safe for use in HTML, but does protect you from syntax errors when using templates to generate JavaScript/JSON. 

[Edit3] Qu'en est-force_escape:

{{ value|force_escape }} 

.. .et je sais que c'est une évidence, mais vous êtes absolument certain que vous n'avez pas de cache en cours je Dans votre navigateur? J'ai trébuché sur celui-ci quelques fois moi-même ;-)

+0

J'ai essayé de m'échapper de force en utilisant l'étiquette de modèle "escape". Pas de dé. Ce que je * veux * faire c'est ne pas rendre l'alerte - ce qui, dans mon esprit, serait d'échapper à la valeur. – Huuuze

+0

Pas de mise en cache non plus. Cela m'a traversé l'esprit aussi. :) – Huuuze

+0

Bizarre ... Je vais essayer cet après-midi sur mon installation DJango et voir si je peux trouver quelque chose ... –

0

J'ai trouvé le problème. La chaîne JSON que j'utilise pour rendre des données à certains widgets Ext est le coupable. Un grand merci à Jon Cage. Réponse acceptée malgré le problème causé par une autre source.

Questions connexes