2012-05-04 93 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。這是一個不錯的簡單解決方案。 –