2010-05-27 85 views
0

我可以用这种方式使用urlize过滤器吗? :我可以用这种方式使用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

如果您询问该代码段是否可以工作,只要语法被考虑,答案是肯定的,它不应该导致服务器500错误。

但是,对于urlize的文件说,我引用:

注意,如果urlize被应用到已经包含HTML标记 文本 ,事情会不会达到预期效果。 仅将此筛选器应用于纯文本。

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

当您编辑现有的对象,打电话save将重新对body属性的内容是不是在这一点上纯文本的urlize过滤器。

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

你可以使用脱衣通过MLStripper class from activestate调用urlize例如之前每次urlize插入HTML:

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 }} 
+0

是的,我想在模板中使用urlize,但是我已经阅读了一本关于django(关于django的权威指南)的书籍,它可以方便地保存格式为标签且无标签(2 TextField)的主体以获得更好的性能: - \ – xRobot 2010-05-28 07:58:23

+0

出于性能方面的考虑,使用两个字段对于大量文本将是可信的,但是如果文本大到足以导致性能下降,则应该重新考虑处理数据的方式。例如,您可以在输入中使用文本编辑器,以便用户在将文本保存到数据库之前定义链接。另外,我很难在Django的权威指南中找到对“urlize”的引用。 – 2010-05-28 16:53:41

相关问题