2010-06-05 51 views

回答

4

mark_safe是工厂函数包封位类型检查逻辑的,以便返回,只要合适,可以一个SafeUnicodeSafeString(或可能的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)每分钟要快,但可以给你带来麻烦,如果你可能处理一个类型和值,唐” t很高兴地支持被传递给SafeUnicode初始值设定项(例如,一个非ASCII码字符串,一个非字符串,一个带字符串委托的Promise,...)。如果你100%确定自己知道自己在做什么,那么没有什么能阻止你采用纳秒级的节能方法;-)。

顺便说一下,关于开源代码的一些问题(无论文档有多好,以及Django的文档是否真的令人印象深刻)通常通过先查看代码(然后询问代码是否太复杂或微妙地跟随保证)。

+2

查看源代码+1。当常规文档无法解释某些内容时,Django的源代码提供了非常好的文档。 Python非常易读。 – 2010-06-05 01:13:24

+0

谢谢你如此彻底而简洁地回答我的问题。我也很感谢你的宝贵意见。这很像我最喜欢的谚语之一:“给一个人一条鱼,你喂他一天,教一个人钓鱼,你给他一辈子” – mkelley33 2010-06-05 01:47:39

+0

保罗,+1支持。我爱Python。它的可读性和优秀的社区只是我最近从C#和ASP.NET切换到Django和Python的许多原因中的两个:)再次感谢! – mkelley33 2010-06-05 01:51:15

相关问题