我有一个字符串:
# 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 属性。
在这种特定情况下,您可以通过子类化 ImageInlineProcessor
和 ReferenceInlineProcessor
来覆盖 image_link
和 image_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()])
您可以采取一些措施来改进扩展,这些操作留给读者作为练习:
- 添加 configuration setting到扩展程序来设置基本 URL,而不是对其进行硬编码。
- 在加入基础时进行一些错误检查,以确保现有网址尚不具备基础。
- 将其打包到 Python 包中以便分发并与其他人共享。
关于Python Markdown : How can I config Base URL for Media when markdown string into HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54920208/