我应该使用哪种?为什么?有关系吗?SafeUnicode或django.utils.safestring.mark_safe()?

mke*_*y33 2 python string django

假设我有一个带有一些HTML的自定义表单标签,如下所示:

SafeUnicode('<span class="superscript">&trade;</span>')
Run Code Online (Sandbox Code Playgroud)

为什么Django 1.2有一个函数mark_safe如果存在?有什么区别?

谢谢您的帮助!

Ale*_*lli 5

mark_safe是一个工厂函数,它封装了一些类型检查逻辑,以便适当地返回a SafeUnicode或a 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))
Run Code Online (Sandbox Code Playgroud)

只是使用SafeUnicode(s)而不是make_safe(s)会更快,但如果你可能处理一个不乐意支持传递给SafeUnicode初始值设定项的类型和值(例如,带有非ascii代码的字节字符串,则可能会让你遇到麻烦)非字符串,Promise带字符串委托的a,...).如果你100%确定你知道自己在做什么,那么没有什么可以阻止你采取纳秒节省方法;-).

顺便说一下,关于开源代码的一些问题(无论文档记录多少,Django的文档真的令人印象深刻)通常最好先回答一下代码(然后再问一下代码是否过于复杂或微妙而无法遵循保证).

  • +1来看源.当常规文档没有解释时,Django的源代码可以提供相当好的文档.Python非常易读. (3认同)