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

Функция format_html_join

Функция format_html_join применяется для построения HTML-строки путем многократного применения формата к последовательности данных. Она принимает разделитель, строку формата и итерируемый объект с аргументами для форматирования. В отличие от ручной конкатенации строк, функция автоматически экранирует все передаваемые значения, предотвращая XSS-уязвимости, но при этом позволяет вставлять безопасные HTML-теги.

Параметры функции:

  • separator - строка, которая будет вставляться между сгенерированными фрагментами (например, запятая, перенос строки или пустая строка)
  • format_string - строка формата с плейсхолдерами %s, определяющая шаблон каждого фрагмента
  • args_generator - итерируемый объект, возвращающий кортежи аргументов для подстановки в строку формата

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

Синтаксис

from django.utils.html import format_html_join format_html_join(separator, format_string, args_generator)

Пример

Давайте сгенерируем список ссылок для навигационного меню:

from django.utils.html import format_html_join links = [ ("Главная", "/"), ("Блог", "/blog/"), ("Контакты", "/contacts/"), ] nav_html = format_html_join( '\n', '<a href="{}">{}</a>', ((url, name) for name, url in links), ) print(nav_html)

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

"<a href="/">Главная</a>\n<a href="/blog/">Блог</a>\n<a href="/contacts/">Контакты</a>"

Пример

Давайте создадим список тегов для статьи с использованием списка значений из модели:

from django.utils.html import format_html_join from myapp.models import Tag tags = Tag.objects.filter(is_active=True).values_list('name', 'slug') tags_html = format_html_join( ', ', '<span class="tag">{}</span>', ((name,) for name, slug in tags), ) print(tags_html)

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

"<span class="tag">Python</span>, <span class="tag">Django</span>, <span class="tag">Web</span>"

Пример

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

from django.utils.html import format_html_join from django.utils.safestring import mark_safe users = [ ("Иван", "admin", mark_safe('<span class="badge">✓</span>')), ("Мария", "editor", mark_safe('<span class="badge">✎</span>')), ("Петр", "viewer", ""), ] table_rows = format_html_join( '', '<tr><td>{}</td><td>{}</td><td>{}</td></tr>', ((name, role, badge) for name, role, badge in users), ) table_html = format_html_join( '', '<table><thead><tr><th>Имя</th><th>Роль</th><th>Статус</th></tr></thead><tbody>{}</tbody></table>', ((table_rows,),) ) print(table_html)

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

"<table><thead><tr><th>Имя</th><th>Роль</th><th>Статус</th></tr></thead><tbody><tr><td>Иван</td><td>admin</td><td><span class="badge">✓</span></td></tr><tr><td>Мария</td><td>editor</td><td><span class="badge">✎</span></td></tr><tr><td>Петр</td><td>viewer</td><td></td></tr></tbody></table>"

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

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