2010-05-27 67 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

相關問題