РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
738 of 818 menu

Класс SafeString

Класс SafeString применяется для обёртки строк, которые уже прошли необходимую обработку и могут быть безопасно выведены в HTML-шаблонах без дополнительного экранирования. Обычно экземпляры этого класса создаются с помощью функции mark_safe. Основное назначение SafeString - предотвратить повторное экранирование строки в шаблонах, позволяя рендерить HTML-разметку.

Синтаксис

from django.utils.safestring import SafeString safe_string = SafeString(value)

Класс принимает один обязательный аргумент - строку, которую нужно обернуть как безопасную.

Пример

Давайте создадим безопасную строку с HTML-разметкой и передадим её в шаблон:

from django.utils.safestring import SafeString html_content = SafeString("<h1>Welcome to our site</h1><p>This is safe content</p>") print(html_content)

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

"<h1>Welcome to our site</h1><p>This is safe content</p>"

В шаблоне эта строка будет выведена как сырой HTML-код, а не экранированная строка.

Пример

Сравним поведение обычной строки и SafeString в шаблоне. Создадим представление, которое передаёт обе строки в контекст:

from django.utils.safestring import SafeString from django.shortcuts import render def index_view(request): context = { "unsafe": "<script>alert('XSS')</script>", "safe": SafeString("<strong>Bold text</strong>"), } return render(request, "index.html", context)

В шаблоне index.html:

<div> {{ unsafe }} </div> <div> {{ safe }} </div>

Первая строка будет экранирована и выведена как текст, а вторая - как HTML-тег <strong>.

Пример

Покажем, как работает конкатенация обычной строки с SafeString. Результат всегда будет безопасным:

from django.utils.safestring import SafeString safe_part = SafeString("<em>emphasized</em>") unsafe_part = " and plain text" combined = safe_part + unsafe_part print(combined) print(type(combined))

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

"<em>emphasized</em> and plain text" "<class 'django.utils.safestring.SafeString'>"

Как видно, конкатенация сохраняет тип SafeString, и вся строка считается безопасной.

Пример

Продемонстрируем использование SafeString вместе с функцией format_html, которая уже возвращает безопасную строку:

from django.utils.html import format_html from django.utils.safestring import SafeString name = "Alice" safe_html = format_html('<span class="user">{}</span>', name) print(safe_html) print(isinstance(safe_html, SafeString))

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

"<span class="user">Alice</span>" "True"

format_html автоматически создаёт экземпляр SafeString, упрощая работу с безопасными строками.

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

  • функция mark_safe,
    которая создаёт экземпляр SafeString
  • функция escape,
    которая экранирует специальные HTML-символы
  • функция format_html,
    которая форматирует строку с HTML-разметкой
  • функция conditional_escape,
    которая экранирует строку, если она не безопасна
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить