首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以这样使用urlize过滤器吗?

我可以这样使用urlize过滤器吗?
EN

Stack Overflow用户
提问于 2010-05-28 01:15:16
回答 1查看 636关注 0票数 0

我可以这样使用urlize过滤器吗?:

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-28 05:40:28

如果您正在询问该代码片段是否可以工作,只要语法被认为是肯定的,它就不会导致服务器500错误。

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

请注意,如果将urlize应用于已包含

标记的文本,则不会按预期工作。仅将此筛选器应用于纯文本。

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

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

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

您可以在每次调用urlize之前剥离urlize插入的超文本标记语言,例如使用MLStripper class from activestate

代码语言:javascript
复制
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,例如:

代码语言:javascript
复制
{{ object.body|urlize }}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2923276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档