2010-05-27 2 views

ответ

1

Если вы спрашиваете, работает ли этот фрагмент, насколько синтаксис считается ответом да, он не должен вызывать ошибку сервера 500.

Но, документация для urlize говорит, цитирую:

Обратите внимание, что если urlize применяется к тексту, который уже содержит HTML разметку, то не будет работать, как ожидалось. Применить этот фильтр только к простому тексту.

Так что, предполагая, что ваш контент является простым текстом при первом создании объекта, все должно быть хорошо.

При редактировании существующего объекта, вызов save будет повторно использовать urlize фильтр на содержании body атрибута, который не является простым текстом в этой точке.

Насколько я могу сказать, это не вызовет серьезного горя, если в содержании используются только правильно отформатированные HTML-ссылки, но по-прежнему предлагается документацией, что вы должны использовать только обычный текст в качестве аргумента для urlize.

Вы можете лишить HTML вставленные urlize каждый раз перед вызовом к urlize, например, с помощью MLStripper class from 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 }} 
+0

Да, я хотел использовать urlize в шаблоне, но я прочитал в книге о django (Окончательное руководство по django), которое удобно сохранять тело, отформатированное с помощью тегов и без тегов (в 2 TextField) для лучшей производительности: - \ – xRobot

+0

По соображениям производительности использование двух полей будет бенедиктическим для большого текста, но если текст достаточно велик, чтобы вызвать потерю производительности, вам следует, вероятно, пересмотреть способ обработки ваших данных. Например, вы можете использовать текстовый редактор для ввода, чтобы пользователь определял ссылки до того, как текст будет сохранен в базе данных. Также мне трудно найти эту ссылку для «urlize» в «Окончательном руководстве по Django». –

Смежные вопросы