2014-03-02 27 views
1

我有以下问题覆盖输出,我使用降价库我的web应用程序,我需要修改由它产生的输出,即我想<img src="...">标签更改默认为<img data-src="...">。什么是最好的方式来改变这个模块生成的HTML?Python的 - 如何从降价库

+0

看看这里的灵感:https://github.com/waylan/Python-Markdown/blob/master/markdown/treeprocessors.py – Kos

回答

3

您可能想要使用Python-Markdown的Extension API。大多数人使用API​​来添加自己的语法,但它可以轻松地改变现有的输出。这样,您可以使用Markdown的解析器,但可以获得所需的输出。无需包装或解析两次。

在你的情况下,你想覆盖(子类)ImagePattern类和定义handleMatch方法返回的自己的元素。那么你只需要tell Markdown about it。在你的情况下,正则表达式甚至不需要有所不同。只需导入并重新使用现有的IMAGE_LINK_RE并覆盖inlinePatterns["image_link"]即可。

这个tutorial应该让你开始。虽然它实现了一种不同的语法,但其基础是相同的,并且比API文档短得多。

为了完整起见,如果您对图像使用参考语法,则需要使用ImageReferencePattern做同样的事情。你可能会发现它更容易实现为TreeProcessor(我相信这是@Kos在他对原文的评论中所指的)。这样,现有的解析器就构建了现有的输出,但是在将ElementTree序列化为文本之前,您可以遍历所有img标签并对其进行更改以适应您的需求。作为一个例子,HeaderId Extension这样做是为了给h1-6标签添加ID。

+0

这正是我所期待的。谢谢你的帮助。 –