Python - 如何覆盖Markdown库的输出

2 投票
1 回答
525 浏览
提问于 2025-04-17 20:30

我遇到了一个问题,我在我的网页应用中使用了markdown库,但我需要修改它生成的输出。具体来说,我想把默认的 <img src="..."> 标签改成 <img data-src="...">。请问有什么好的方法可以改变这个模块生成的HTML吗?

1 个回答

2

你可能想用Python-Markdown的扩展API。大多数人使用这个API来添加自己的语法,但它同样可以轻松地修改现有的输出。这样,你就可以使用Markdown的解析器,同时得到你想要的输出。无需使用额外的包装器或进行两次解析。

在你的情况下,你想要重写(子类化)ImagePattern类,并定义你自己的元素,这个元素会通过handleMatch方法返回。然后你只需要告诉Markdown这件事。在你的情况下,正则表达式甚至不需要不同。只需导入并重用现有的IMAGE_LINK_RE,然后重写inlinePatterns["image_link"]

这个教程可以帮助你入门。虽然它实现的是不同的语法,但基本原理是一样的,而且比API文档短得多。你也可以看看第一部分

为了完整,如果你使用的是图片的引用语法,你需要对ImageReferencePattern做同样的事情。你可能会发现作为TreeProcessor来实现会更简单(我相信这就是@Kos在他对原帖的评论中提到的)。这样,现有的解析器会生成现有的输出,但在将元素树序列化为文本之前,你可以遍历所有的img标签,并根据需要进行修改。举个例子,HeaderId扩展就是这样做的,它为h1-6标签添加了ID。

撰写回答