2012-05-04 126 views
4

Django有一个模板标签,允许您删除存储数据中显示的某些html标签。Django模板标签允许粗体和斜体元素

django文档给出了一个例子。任何b或span标签都将被删除。 https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#removetags

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

不过,我不知道是否有做反的好方法。例如,黑名单除指定标签外的所有标签。就我而言,我只想让粗体和斜体标签。

回答

3

使用bleach写你自己的模板标签。

1

您可以根据原removetags和这个正则表达式编写自己的模板标签:

>>> import re 
>>> tags = ['b', 'i'] 
>>> tags_re = u'(%s)' % u'|'.join(tags) 
>>> striptags_re = re.compile(ur'</(?!{0}).*?>|<(?!/)(?!{0}).*?>'.format(tags_re), re.U) 
>>> value = '<b>foo</b><i><p>bar</b>' 
>>> striptags_re.sub(u'', value) 
u'<b>foo</b><i>bar</b>' 
>>> value = '<b>foo</b><p>bar</p>' 
>>> striptags_re.sub(u'', value) 
u'<b>foo</b>bar' 
+0

使用正则表达式解析HTML强烈劝阻。 –

+0

我不打算解析HTML。 OP问及关于删除标签,我做到了。你可以看到我的代码和原来的django标签一样工作 – San4ez

+0

谢谢你的San4ez。这是一个不错的简单解决方案。 –