фильтр шаблонов django удалить html-теги

в следующей переменной шаблона django .Можно ли удалить HTML-теги через фильтры шаблонов django

 {{myvar|safe}}

следующее выведет html как

     <div>sddfdsfsdfsdf sd fsdf sd fsdf </div><a>This link</a><img src="some source" />

2 ответов


вы смотрели striptags? Это превратит ваш HTML в это (минус подсветка синтаксиса This, конечно):

sddfdsfsdfsdf sd fsdf sd fsdf This link

но имейте в виду, что этот фильтр шаблонов использует regex чтобы удалить теги HTML. как известно, regexes не являются правильным инструментом для работы с HTML большую часть времени. Если ваш HTML приходит извне, обязательно санируйте его с помощью реального парсера HTML, например lxml.html.clean.


striptags

делает все возможное, чтобы удалить все [X]HTML-теги.

например:

{{ myvar|striptags }}

если myvar <b>Joel</b> <button>is</button> a <span>slug</span>, выход будет Joel is a slug.

вы также можете использовать strip_tags в коде Python, т. е. в форме.

например, в виде чистого метода:

class AddressForm(forms.ModelForm):

    class Meta:
        model = Address

    def clean(self):
        from django.utils.html import strip_tags
        cleaned_data = super(AddressForm, self).clean()
        cleaned_data['first_name'] = strip_tags(cleaned_data.get('first_name'))
        return cleaned_data

посмотреть Django HTML Utils, также проверьте это простое Django HTML дезинфицирующее приложение.