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