Что я должен использовать и почему? Это имеет значение? SafeUnicode или django.utils.safestring.mark_safe ()? - PullRequest
2 голосов
/ 05 июня 2010

Предположим, у меня есть метка пользовательской формы с некоторым HTML-кодом, например:

SafeUnicode('<span class="superscript">&trade;</span>')

Зачем в Django 1.2 функция mark_safe, если она существует? Каковы различия, если таковые имеются?

Спасибо за помощь!

1 Ответ

5 голосов
/ 05 июня 2010

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 действительно впечатляют) часто лучше всего ответить, сначала посмотрев код (а затем спросив, слишком ли сложен код или тонко следовать с уверенностью).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...