在以下django模板变量中。是否可以通过django模板过滤器删除html标签
{{myvar|safe}}
以下将输出类似
的html <div>sddfdsfsdfsdf sd fsdf sd fsdf </div><a>This link</a><img src="some source" />
答案 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 }}