¿Obtener la extensión python-markdown para generar tags html con un atributo de clase específico en Django?

Inicialmente pensé que cómo pasar el atributo de clase y el valor a la syntax de markdown y ¿Cómo configuro un atributo de clase HTML en Markdown? hice la pregunta que quiero hacer aquí, pero quiero saber cómo escribir una extensión python-markdown que genere un elemento html span con un atributo de clase específico en Django.

He escrito la siguiente extensión (archivo guardado como “mdx_debatesyntax.py”):

import markdown from markdown.inlinepatterns import Pattern PREMISE_RE = r'(\[p )(.*?)\]' class AttrTagPattern(Pattern): """ Return element of type `tag` with a text attribute of group(3) of a Pattern and with the html attributes defined with the constructor. """ def __init__ (self, pattern, tag, attrs): Pattern.__init__(self, pattern) self.tag = tag self.attrs = attrs def handleMatch(self, m): el = markdown.util.etree.Element(self.tag) el.text = m.group(3) for (key,val) in self.attrs.items(): el.set(key,val) return el class DebateSyntaxExtension(markdown.Extension): def extendMarkdown(self, md, md_globals): premise_tag = AttrTagPattern(PREMISE_RE, 'span',{'class':'premise'}) md.inlinePatterns.add('premise', premise_tag, '_begin') def makeExtension(configs=None): return DebateSyntaxExtension(configs=configs) 

Y cuando pruebo esto directamente (no a través de Django) funciona:

 import markdown md = markdown.Markdown(extensions=['debatesyntax']) md.convert('This is a [p test]!') 

Devoluciones

 u'

This is a test!

'

Sin embargo, cuando ejecuto esto a través de Django, la clase de atributo se elimina, dándome:

 

This is a test!

¿Cómo evito que el atributo de clase (u otros atributos) sea eliminado?

Resolución

La aplicación Django que estaba modificando (OSQA) estaba “saneando” manualmente el HTML. El código de clase AttrTagPattern, después de todo, funciona.

tratar

 {{ value|markdown:"debatesyntax" }}