Функция conditional_escape

Функция conditional_escape применяется к строке и возвращает экранированную версию, если строка не помечена как безопасная. Функция проверяет, является ли переданный объект экземпляром SafeString или имеет атрибут __html__. Если да, то объект возвращается без изменений. В противном случае выполняется экранирование специальных символов HTML: &, <, >, " и '.

Функция особенно полезна при работе с шаблонами и формировании HTML-контента, когда необходимо избежать двойного экранирования уже безопасных данных.

Синтаксис

pythonconditional_escape(value)

Параметры

Функция принимает один обязательный параметр:

Возвращает экранированную строку или исходный объект, если он уже безопасен.

Пример . С обычной строкой

Рассмотрим базовый пример использования функции conditional_escape с обычной строкой, содержащей HTML-теги:

pythonfrom django.utils.html import conditional_escape

user_input = "<script>alert('hello')</script>"
res = conditional_escape(user_input)
print(res)

Результат выполнения кода:

python"<script>alert('hello')</script>"

Пример . С безопасной строкой

Если строка уже помечена как безопасная с помощью функции mark_safe, conditional_escape не будет её экранировать:

pythonfrom django.utils.html import conditional_escape, mark_safe

safe_html = mark_safe("<strong>Hello World</strong>")
res = conditional_escape(safe_html)
print(res)

Результат выполнения кода:

python"<strong>Hello World</strong>"

Пример . Использование в шаблоне

Функция часто используется при ручном формировании HTML-контента для предотвращения XSS-атак:

pythonfrom django.utils.html import conditional_escape

user_name = "John & Jane"
safe_name = conditional_escape(user_name)
html_output = f"<div>Welcome, {safe_name}!</div>"
print(html_output)

Результат выполнения кода:

python"<div>Welcome, John & Jane!</div>"

Пример . С числами и другими типами

Функция корректно обрабатывает не только строки, но и другие типы данных, преобразуя их в строки перед экранированием:

pythonfrom django.utils.html import conditional_escape

number = 123
boolean = True
none_value = None

res1 = conditional_escape(number)
res2 = conditional_escape(boolean)
res3 = conditional_escape(none_value)

print(res1)
print(res2)
print(res3)

Результат выполнения кода:

python"123"
"True"
"None"

Смотрите также

  • функция mark_safe,
    которая помечает строку как безопасную для вывода
  • функция escape,
    которая всегда экранирует строку без проверки безопасности
  • класс SafeString,
    который представляет безопасные строки в Django
  • функция format_html,
    которая форматирует строку с автоматическим экранированием