mke*_*y33 2 python string django
假设我有一个带有一些HTML的自定义表单标签,如下所示:
SafeUnicode('<span class="superscript">™</span>')
Run Code Online (Sandbox Code Playgroud)
为什么Django 1.2有一个函数mark_safe如果存在?有什么区别?
谢谢您的帮助!
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的文档真的令人印象深刻)通常最好先回答一下代码(然后再问一下代码是否过于复杂或微妙而无法遵循保证).