Skip to main content
 首页 » 编程设计

python之获取 python-markdown 扩展以在 Django 中输出具有特定类属性的 html 标签

2024年08月30日38zfyouxi

我最初认为 how to pass class attribute and value to markdown syntax和 How do I set an HTML class attribute in Markdown?问了我想在这里问的问题,但我想知道如何编写一个 python-markdown 扩展,它在 Django 中输出具有特定类属性的 html span 元素。

我写了以下扩展(文件保存为“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 类代码确实有效。

请您参考如下方法:

尝试

{{ value|markdown:"debatesyntax" }}