我可以用这种方式使用urlize过滤器吗?

时间:2010-05-27 17:15:16

标签: django django-models django-database

我可以这样使用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。

1 个答案:

答案 0 :(得分:1)

如果你问这个片段是否会起作用,只要语法被认为答案是肯定的,它就不应该导致服务器500错误。

但是,urlize的文档说,我引用:

  

请注意,如果应用了urlize   已包含HTML的文本   标记,事情将无法按预期工作。   仅将此过滤器应用于纯文本。

因此,假设您的内容在首次创建对象时是纯文本,一切都应该没问题。

当您编辑现有对象时,调用save会在urlize属性的内容上重新应用body过滤器,此属性此时不是纯文本。

据我所知,如果内容中只使用格式正确的HTML链接,这不会引起严重的悲痛,但文档仍建议您只能使用纯文本作为urlize的参数。

您可以在调用urlize之前每次urlize删除由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) 插入的HTML,例如使用MLStripper class from activestate

urlize

理论上至少......

除非您有充分的理由在模型中使用模板过滤器,否则您应该真正做的是在模板中使用{{ object.body|urlize }} ,例如:

{{1}}