このように 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 です。
このように 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 です。
そのスニペットが構文と見なされる限り機能するかどうかを尋ねる場合、答えが「はい」の場合、サーバー 500 エラーが発生することはありません。
しかし、urlizeのドキュメントには次のように書かれています。
既に HTML マークアップを含むテキストに urlize を適用すると、期待どおりに動作しないことに注意してください。このフィルターはプレーン テキストにのみ適用します。
したがって、オブジェクトが最初に作成されたときにコンテンツがプレーンテキストであると仮定すると、すべて問題ありません。
既存のオブジェクトを編集する場合、 を呼び出すと、この時点ではプレーン テキストではない属性のコンテンツにフィルターsave
が再適用されます。urlize
body
私が知る限り、コンテンツで適切にフォーマットされた HTML リンクのみが使用されている場合、これは深刻な問題を引き起こすことはありませんが、ドキュメントでは、引数としてプレーンテキストのみを使用する必要があることが依然として示唆されていますurlize
。
たとえば、アクティブステートから MLStripper クラスurlize
を使用して、呼び出しの前に毎回挿入された HTMLを削除できます。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)
理論的には少なくとも...
モデルでテンプレート フィルターを使用する非常に強い理由がない限り、実際にすべきことは、urlize
テンプレートで次のように使用することです。
{{ object.body|urlize }}