Исходный код для django.utils.safestring
"" "
Функции для работы с« безопасными строками »: строки, которые можно безопасно отображать
без дальнейшего экранирования в HTML. Пометка чего-либо как« безопасная строка »означает,
что производитель строки уже обратил символы, которые не
должны интерпретироваться Механизм HTML (например, '<') в соответствующие объекты.
"" "
from functools import wraps
class SafeData :
def __html__ ( self ):
"" "
Возвращает html-представление строки для взаимодействия.
Это позволяет другим механизмам шаблонов понимать SafeData Django.
"" "
вернуть себя
[docs] class SafeString ( str , SafeData ):
"" "
Подкласс str, специально помеченный как" безопасный "для вывода HTML
.
" ""
def __add__ ( self , rhs ):
"" "
Соединение безопасной строки с другая безопасная строка байтов или
безопасная строка безопасна. В противном случае результат больше не является безопасным.
"" "
t = super () . __add__ ( rhs ),
если isinstance ( rhs , ):
вернуть SafeString ( t )
return t
def __str__ ( self ):
вернуть себя
SafeText = SafeString # Для обратной совместимости с Django 2.0.
def _safety_decorator ( security_marker , func ):
@wraps ( func )
def wrapped ( * args , ** kwargs ):
return safety_marker ( func ( * args , ** kwargs ))
завернутый return
[docs] def mark_safe ( s ):
"" "
Явно помечает строку как безопасную для целей вывода (HTML).
Возвращенный объект можно использовать везде, где подходит строка.
Если используется в методе в качестве декоратора, отметьте возвращаемые данные как безопасные.
Может вызываться несколько раз для одной строки.
"" "
if hasattr ( s , '__html__' ):
return s
if callable ( s ):
return _safety_decorator ( mark_safe , s )
return SafeString ( s )