假设我有一个带有一些HTML的自定义表单标签,如下所示:
SafeUnicode('<span class="superscript">™</span>')
为什么Django 1.2有一个函数mark_safe如果存在?有什么区别?
感谢您的帮助!
答案 0 :(得分:5)
mark_safe
是一个工厂函数,它封装了一些类型检查逻辑,以便适当地返回SafeUnicode
或SafeString
(或者可能是其他一些子类) SafeData
你应该定义任何这样的子类)。 source很容易引用......:
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)
只会快一点,但是如果你有可能处理一种不乐意支持传递给{的类型和值,可能会让你陷入困境{1}}初始值设定项(例如,带有非ascii代码的字节字符串,非字符串,带有字符串委托的SafeUnicode
,...)。如果你100%确定你知道自己在做什么,那么没有什么可以阻止你采用纳秒节省方法; - )。
顺便说一下,关于开源代码的一些问题(无论文档记录多少,Django的文档真的令人印象深刻)通常最好先回顾一下代码(然后询问代码是否太复杂或者微妙地遵循保证)。