Django模板标签允许加粗和斜体元素。

4

Django有一个模板标签,可以允许你从存储的数据中删除某些HTML标签以便不被显示。

Django官方文档提供了一个示例。任何b或span标签都将被移除。https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#removetags

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

但是,我想知道是否有一种好的方法来完成相反的操作。例如,黑名单除了指定的标签之外所有标签都不允许使用。在我的情况下,我只想允许使用粗体和斜体标签。

2个回答

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'

不建议使用正则表达式来解析HTML。 - Armando Pérez Marqués
我不打算解析HTML。OP询问如何删除标签,我已经完成了。你可以看到我的代码像原始的Django标签一样工作。 - San4ez
感谢您的San4ez。这是一个不错且简单的解决方案。 - Joe J

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接