Python Markdown : How can I config Base URL for Media when markdown string into HTML

标签 python python-3.x markdown

我有一个字符串:

# H1 tag
h1 content is here

![](/media/blog/1551266934_21_289.jpg)

如您所见,我有一张图像 ![](/media/blog/1551266934_21_289.jpg) (与 ![](mydomain.com/media/blog/1551266934_21_289.jpg) 相同)

当markdown时,它变成:<img src="/media/blog/1551266934_21_289.jpg"/>

但我想要的结果是使用不同的基本网址:

<img src="https://media.mydomain.com/media/blog/1551266934_21_289.jpg"/>

最佳答案

您可以使用Python-Markdown的Extension API并开发一个插件来更改所有图像的 src 属性。

在这种特定情况下,您可以通过子类化 ImageInlineProcessorReferenceInlineProcessor 来覆盖 image_linkimage_reference 内联处理器> 类(class)。但不需要改变解析器的行为。您只需修改所有img标签的src属性即可。使用 TreeProcessor 是最简单的.

from markdown.treeprocessors import Treeprocessor
from urllib.parse import urljoin

BASE = 'https://media.mydomain.com/'

class ImgBaseTreeprocessor(Treeprocessor):
    def run(self, root):
        # Loop through all img elements
        for img in root.getiterator('img'):
            # Join base to the src URL
            img.set('src', urljoin(BASE, img.get('src'))

现在您需要通过 Extension 子类告诉 Markdown 类有关您的新 Treeprocessor 的信息:

from markdown.extensions import Extension

class ImgBase(Extension):
    def extendMarkdown(self, md, md_globals):
        # register the new treeprocessor with priority 15 (run after 'inline')
        md.treeprocessors.register(ImgBaseTreeprocessor(md), 'imgbase', 15)

最后,您需要告诉 Markdown 使用您的新扩展:

from markdown import markdown

html = markdown(text, extensions=[ImgBase()])

您可以采取一些措施来改进扩展,这些操作留给读者作为练习:

  1. 添加 configuration setting到扩展程序来设置基本 URL,而不是对其进行硬编码。
  2. 在加入基础时进行一些错误检查,以确保现有网址尚不具备基础。
  3. 将其打包到 Python 包中以便分发并与其他人共享。

关于Python Markdown : How can I config Base URL for Media when markdown string into HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54920208/

相关文章:

python-3.x - 如何将已弃用的 tf.train.QueueRunners tensorflow 方法转换为将数据导入新的 tf.data.Dataset 方法

Flutter - 如何在 sliver 中显示 markdown 文本

php - 无法使用 StackExchanges 的 PageDown 将 markdown 转换为 HTML

markdown - 与 PageDown 一起使用时 MarkDownSharp 的用途是什么?

python - 如何在 Sprite 的底部添加额外的图像或矩形?

python - 如何在一行中将列表转换为索引和数据的字典(用于lambda)

python - Pandas 计算满足条件的行的列平均值

python - Python中的正则表达式来匹配具有特殊字符的单词

python - 如何使用 python 将原始 json 数据 [作为 python 字典] 写入 Google 云存储?

java - 如何连接Python聊天机器人和Java聊天室