django模板过滤器删除html标签

Raj*_*eev 23 django django-templates django-template-filters

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

 {{myvar|safe}}
Run Code Online (Sandbox Code Playgroud)

以下将输出html之类的

     <div>sddfdsfsdfsdf sd fsdf sd fsdf </div><a>This link</a><img src="some source" />
Run Code Online (Sandbox Code Playgroud)

Ben*_*end 37

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

sddfdsfsdfsdf sd fsdf sd fsdf This link
Run Code Online (Sandbox Code Playgroud)

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

  • 我建议使用`{{myvar | striptags | safe}}},以便Django不会转义HTML实体,例如&nbsp;,而是保留在HTML代码中并由网络浏览器呈现。请注意,`striptags`过滤器实际上去除HTML标记,而不是实体。 (4认同)
  • 它剥离了所有标签,只留下了DOM中所谓的"TextNode".因此,您的图像将被删除,而不会留下任何痕迹. (3认同)

jat*_*tin 17

striptags

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

例如:

{{ myvar|striptags }}
Run Code Online (Sandbox Code Playgroud)

如果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
Run Code Online (Sandbox Code Playgroud)

请参阅Django HTML Utils,另请参阅这个简单的Django HTML Sanitizer应用程序.