Получить расширение python-markdown для вывода тегов html с определенным атрибутом класса в Django? - PullRequest
2 голосов
/ 03 апреля 2012

Сначала я подумал, что как передать атрибут класса и значение в синтаксис уценки и Как установить атрибут класса HTML в Markdown? задал вопрос, который я хочу задать здесь , но я хочу знать, как написать расширение Python-markdown , которое выводит элемент span html с определенным атрибутом класса в Django.

Я написал следующее расширение (файл сохранен как "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)

И когда я проверяю это напрямую (не через Django), это работает:

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

Возвращает

u'<p>This is a <span class="premise">test</span>!</p>'

Однако, когда я запускаю это через Django, класс атрибута удаляется, давая мне:

<p>This is a <span>test</span>!</p>

Как предотвратить удаление атрибута класса (или других атрибутов)?

Разрешение

Приложение Django, которое я модифицировал (OSQA), вручную «санировало» HTML. В конце концов, код класса AttrTagPattern работает.

1 Ответ

3 голосов
/ 03 апреля 2012

попробуй

{{ value|markdown:"debatesyntax" }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...