mark_safe
- это фабричная функция, которая инкапсулирует немного логики проверки типа, чтобы при необходимости возвратить либо SafeUnicode
, либо SafeString
(или, возможно, какой-либо другой подкласс SafeData
, если у вас есть определены любые такие подклассы). Источник достаточно короткий, чтобы процитировать ...:
89 def mark_safe(s):
90 """
91 Explicitly mark a string as safe for (HTML) output purposes. The returned
92 object can be used everywhere a string or unicode object is appropriate.
93
94 Can be called multiple times on a single string.
95 """
96 if isinstance(s, SafeData):
97 return s
98 if isinstance(s, str) or (isinstance(s, Promise) and s._delegate_str):
99 return SafeString(s)
100 if isinstance(s, (unicode, Promise)):
101 return SafeUnicode(s)
102 return SafeString(str(s))
Простое использование SafeUnicode(s)
вместо make_safe(s)
будет в несколько раз быстрее, но может привести к неприятностям, если вы потенциально имеете дело с типом и значением, которые не поддерживают передачу в инициализатор SafeUnicode
( например, строка байтов с кодами не ascii, не строка, Promise
со строковым делегатом, ...). Если вы на 100% уверены, что знаете, что делаете, ничто не помешает вам перейти на метод сохранения наносекунд; -).
Кстати, на некоторые вопросы о коде с открытым исходным кодом (независимо от того, насколько хорошо он документирован и документы Django действительно впечатляют) часто лучше всего ответить, сначала посмотрев код (а затем спросив, слишком ли сложен код или тонко следовать с уверенностью).