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

Функция mark_safe

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

Синтаксис

from django.utils.safestring import mark_safe mark_safe(string)

Пример

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

from django.utils.safestring import mark_safe html_content = "<strong>Hello</strong> <em>World</em>" safe_html = mark_safe(html_content) # В шаблоне {{ safe_html }} выведет: <strong>Hello</strong> <em>World</em> # Без mark_safe Django экранировал бы строку: <strong>Hello</strong>...

Пример

Используем mark_safe для вывода динамического HTML-контента из модели:

from django.utils.safestring import mark_safe from myapp.models import Article article = Article.objects.get(pk=1) formatted_content = mark_safe(article.content) # Теперь в шаблоне {{ formatted_content }} выведет HTML-разметку # без экранирования print(formatted_content)

Результат выполнения кода (если article.content содержит "

Some text

"):

"<p>Some text</p>"

Пример

Используем mark_safe в комбинации с format_html для создания безопасного HTML:

from django.utils.safestring import mark_safe from django.utils.html import format_html username = "<script>alert('xss')</script>" escaped_username = mark_safe(username) # Это потенциально опасно! # Правильный способ - использовать format_html с экранированием safe_html = format_html("<strong>{}</strong>", username) print(safe_html)

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

"<strong><script>alert('xss')</script></strong>"

Пример

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

from django.utils.safestring import mark_safe from myapp.models import Article def get_status_badge(article): if article.status == 'published': html = '<span class="badge badge-success">Published</span>' else: html = '<span class="badge badge-warning">Draft</span>' return mark_safe(html) # Использование в шаблоне: {{ article|get_status_badge }} article = Article.objects.get(pk=1) result = get_status_badge(article) print(result)

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

"<span class=\"badge badge-success\">Published</span>"

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

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