0

我可以以这种方式使用 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)

正文是一个文本字段。

4

1 回答 1

1

如果您询问该片段是否可以在考虑语法的情况下工作,答案是肯定的,它不应该导致服务器 500 错误。

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

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

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

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

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

urlize您可以在调用之前剥离每次插入的 HTML urlize,例如使用来自 activestate 的 MLStripper 类

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 }}
于 2010-05-27T21:40:27.573 回答