Форум сайта python.su
Такая проблема. Пишу блог. В поле модели храню html. Понятно, что в шаблоне поставить фильтр safe нельзя, тогда каждый пользователь скрипт сможет ставить. Решил safe не использовать, а сделать свой фильтр.
from django import template register = template.Library() def my_safe(value): s = str(value) result = "" while True: position = s.find("<img") return position if position == -1: result = result +s break result = result+s[0:position-1] s = "<img "+s[position+7:len(s)+1] s.replace('"','"') s.replace('" >','"') return result register.filter('my_safe', my_safe)
Офлайн
Для этого придуманы различные форматы разметки: BBCOde, Markdown, Wiki и тд.
Вот их и юзайте, сиё безопасно.
Офлайн
Всё равно вопрос остался прежний. Допустим, я использую bbcode. Я пишу свой фильтр для разбора или беру готовый. https://code.djangoproject.com/wiki/CookBookTemplateFilterBBCode
Фильтр разбора отрабатывае, преобразуя bbcode обратно в html, но его тут же накрывает эскейп
Вот так у меня преобразовалась строка
[img]http://anticache.img0.joyreactor.cc/pics/comment/%D0%B3%D0%B8%D1%84%D0%BA%D0%B8-%D0%BA%D0%BE%D1%82-%D1%82%D0%BE%D0%BB%D1%81%D1%82%D1%8B%D0%B9-%D0%B4%D0%B2%D0%B5%D1%80%D1%8C-365023.jpeg[/img]
<img src="http://anticache.img0.joyreactor.cc/pics/comment/%D0%B3%D0%B8%D1%84%D0%BA%D0%B8-%D0%BA%D0%BE%D1%82-%D1%82%D0%BE%D0%BB%D1%81%D1%82%D1%8B%D0%B9-%D0%B4%D0%B2%D0%B5%D1%80%D1%8C-365023.jpeg">
Офлайн
А что Вам мешает в этом случае использовать safe? Вы же получаете гарантированно безопасный код.
Офлайн