Почему Django не может автоматически покинуть мои теги <script>? - PullRequest
1 голос
/ 30 сентября 2008

В моем приложении Django есть таблица Person, которая содержит следующий текст в поле с именем details:

<script>alert('Hello');</script>

Когда я вызываю PersonForm.details в моем шаблоне, страница соответствующим образом отображает скрипт (a.k.a., отображается предупреждение со словом «Hello»). Меня смущает такое поведение, потому что я всегда думал, что Django 1.0 автоматически экранирует содержимое шаблона по умолчанию.

Есть идеи, что здесь происходит?

ОБНОВЛЕНИЕ: Вот фрагмент из моего шаблона. Ничего страшно сексуального:

{{ person_form.details }}

ОБНОВЛЕНИЕ 2: Я пробовал escape, force-escape и escapejs. Ни одна из этих работ.

Ответы [ 2 ]

4 голосов
/ 30 сентября 2008

Вам нужно пометить значения как | Я думаю, безопасно (я предполагаю, что вы вводите значение из базы данных здесь (?)):

{{ value|safe }}

Не могли бы вы опубликовать образец шаблона? Может быть, легче увидеть, что не так

[Редактировать] .. или вы говорите, что хотите , чтобы избежать значений (сделать их безопасными)? Вы пытались вручную покинуть поле:

{{ value|escape }}

[Edit2] Может быть escapejs из документации проекта Django релевантно:

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] А как насчет force_escape:

    {{ value|force_escape }}

... и я знаю, что это очевидно, но вы абсолютно уверены, что в вашем браузере не происходит кэширование? Я сам споткнулся об этом несколько раз; -)

0 голосов
/ 30 сентября 2008

Нашел проблему. Виновным является строка JSON, которую я использую для визуализации данных в некоторые виджеты Ext. Большое спасибо Джону Кейджу. Ответ принят, несмотря на проблему, вызванную другим источником.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...