我可以以这种方式使用 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)
正文是一个文本字段。
我可以以这种方式使用 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)
正文是一个文本字段。
如果您询问该片段是否可以在考虑语法的情况下工作,答案是肯定的,它不应该导致服务器 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 }}