2012-05-04 2 views
4

Django possède un modèle de balise qui vous permet de supprimer certaines balises html d'être affichées dans les données stockées.Balise de modèle Django pour autoriser les éléments en gras et en italique

La documentation de django en donne un exemple. Toutes les balises b ou span sont supprimées. https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#removetags

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

Cependant, je me demande s'il y a une bonne façon de faire l'inverse. Par exemple, liste noire toutes les étiquettes à l'exception des étiquettes spécifiées. Dans mon cas, je veux juste autoriser les tags gras et italiques.

Répondre

3

Écrivez votre propre étiquette de modèle en utilisant bleach.

1

Vous pouvez écrire votre propre étiquette de modèle basé sur l'original removetags et cette expression rationnelle:

>>> 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

Utilisation d'expressions régulières pour l'analyse syntaxique HTML est fortement déconseillée. –

+0

Je ne vais pas analyser HTML. Le PO a demandé à propos de la suppression des étiquettes et je l'ai fait. Vous pouvez voir que mon code fonctionne comme le tag django original – San4ez

+0

Merci pour votre San4ez. C'est une solution agréable et simple. –

Questions connexes