Найти - Пользователи
Полная версия: Как в шаблоне объявить безопасными избранные теги
Начало » Django » Как в шаблоне объявить безопасными избранные теги
1
evgenyivanov
Такая проблема. Пишу блог. В поле модели храню 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('&quot;','"')
        s.replace('&quot; &gt;','"')
    return result
    
register.filter('my_safe', my_safe)
Как выяснилось у меня в мой фильтр значение попадает еще без ескуп-символов. пожалуйста, подскажите, как можно решить эту проблему средствами джанго, не используя джава-скрипт
FishHook
Для этого придуманы различные форматы разметки: BBCOde, Markdown, Wiki и тд.
Вот их и юзайте, сиё безопасно.
evgenyivanov
Всё равно вопрос остался прежний. Допустим, я использую 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]

&lt;img src=&quot;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&quot;&gt;
FishHook
А что Вам мешает в этом случае использовать safe? Вы же получаете гарантированно безопасный код.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB