Если вы спрашиваете, будет ли этот фрагмент работать, если учитывать синтаксис, ответ - да, он не должен вызывать ошибку сервера 500.
Но, документация для urlize говорит, и я цитирую:
Обратите внимание, что если urlize применяется к
текст, который уже содержит HTML
разметка, все не будет работать, как ожидалось.
Примените этот фильтр только к простому тексту.
При условии, что при первом создании объекта ваш контент представляет собой простой текст, все должно быть в порядке.
Когда вы редактируете существующий объект, вызов save
приведет к повторному применению фильтра urlize
к содержимому атрибута body
, который на данный момент не является простым текстом.
Насколько я могу судить, это не вызовет серьезного горя, если в контенте используются только правильно отформатированные ссылки HTML, но в документации по-прежнему предполагается, что в качестве аргумента urlize
следует использовать только простой текст.
Вы можете вырезать HTML, вставленный urlize
каждый раз перед вызовом urlize
, например, используя класс MLStripper из activestate :
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 }}