我可以这样使用urlize过滤器吗?:
from django.utils.html import urlize
def save(self, force_insert=False, force_update=False):
self.body = urlize(self.body)
super(Post, self).save(force_insert, force_update)body是一个TextField。
发布于 2010-05-28 05:40:28
如果您正在询问该代码片段是否可以工作,只要语法被认为是肯定的,它就不会导致服务器500错误。
但是,urlize的文档说,我引用一下:
请注意,如果将urlize应用于已包含
标记的文本,则不会按预期工作。仅将此筛选器应用于纯文本。
因此,假设在第一次创建对象时,您的内容是纯文本,那么一切都应该没问题。
在编辑现有对象时,对save的调用将对body属性的内容重新应用urlize过滤器,此时该属性不是纯文本。
据我所知,如果内容中只使用格式正确的HTML链接,这不会造成严重后果,但文档仍然建议您只应使用纯文本作为urlize的参数。
您可以在每次调用urlize之前剥离urlize插入的超文本标记语言,例如使用MLStripper class from activestate
from somelib import MLStripper
def save(self, force_insert=False, force_update=False):
html_stripper = MLStripper()
html_stripper.feed(self.body)
self.body = urlize(html_stripper.get_fed_data())
super(Post, self).save(force_insert, force_update)至少在理论上。
除非你有非常充分的理由在模型中使用模板过滤器,否则你真正应该做的是在你的模板中使用urlize,例如:
{{ object.body|urlize }}https://stackoverflow.com/questions/2923276
复制相似问题