django模板过滤器删除html标签

时间:2011-07-07 06:46:30

标签: django django-templates django-template-filters

在以下django模板变量中。是否可以通过django模板过滤器删除html标签

 {{myvar|safe}}

以下将输出类似

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

3 个答案:

答案 0 :(得分:35)

你看过striptags了吗?它会将你的HTML变为这个(当然,减去This的语法高亮显示):

sddfdsfsdfsdf sd fsdf sd fsdf This link

但请注意,此模板过滤器使用regex来删除HTML标记。 As we know,正则表达式不是大多数时候使用HTML的正确工具。如果您的HTML来自外部,请确保使用真正的HTML解析器对其进行清理,例如: lxml.html.clean

答案 1 :(得分:15)

striptags

尽一切努力去除所有[X] HTML标记。

例如:

{{ myvar|striptags }}

如果myvar为<b>Joel</b> <button>is</button> a <span>slug</span>,则输出为Joel is a slug

您也可以在python代码中使用strip_tags,即以表格形式。

例如,在Form clean方法中:

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 Sanitizer App

答案 2 :(得分:1)

要从现有字符串中去除/删除 HTML 标签,我们可以使用 strip_tags 函数。

导入strip_tags

from django.utils.html import strip_tags

内含 html 的简单字符串。

html = '<p>paragraph</p>'

print html # will produce: <p>paragraph</p>
 

stripped = strip_tags(html)
print stripped # will produce: paragraph

这也可用作模板标签:

{{ somevalue|striptags }}

如果您只想删除特定标签,您需要使用 removetags

from django.template.defaultfilters import removetags
html = '<strong>Bold...</strong><p>paragraph....</p>'
stripped = removetags(html, 'strong') # removes the strong only.
stripped2 = removetags(html, 'strong p') # removes the strong AND p tags.
 

也可在模板中使用:

{{ value|removetags:"a span"|safe }}