当使用 markdown2库无法正确解析被 ``` 包裹的代码块时,通常是因为缺少相应的扩展或配置不正确。以下是解决方案:
markdown2默认可能不启用 fenced code blocks(``` 包裹的代码块)支持,或者使用了不兼容的扩展。
import markdown2
markdown_text = """
python
def hello():
print("Hello, World!")
"""
html = markdown2.markdown(markdown_text, extras=["fenced-code-blocks"])
print(html)
html = markdown2.markdown(
markdown_text,
extras=[
"fenced-code-blocks", # 支持 ``` 代码块
"code-friendly", # 更好的代码支持
"cuddled-lists", # 更好的列表支持
"tables", # 表格支持
"footnotes", # 脚注支持
]
)
如果你可以切换库,python-markdown(通常导入为 markdown) 对代码块的支持更好:
import markdown
html = markdown.markdown(
markdown_text,
extensions=[
'fenced_code', # 支持 ``` 代码块
'codehilite', # 代码高亮
'tables', # 表格支持
'toc' # 目录生成
]
)
from markdown2 import Markdown
markdowner = Markdown(
extras={
'fenced-code-blocks': {},
'code-friendly': {},
'tables': {},
}
)
html = markdowner.convert(markdown_text)
完整示例
import markdown2
def convert_markdown_to_html(markdown_text):
"""将Markdown转换为HTML,正确处理代码块"""
extras = [
"fenced-code-blocks", # 支持 ``` 代码块
"code-friendly", # 更好的代码处理
"tables", # 表格支持
"footnotes", # 脚注支持
"toc", # 目录生成
]
html = markdown2.markdown(
markdown_text,
extras=extras,
)
return html
markdown_text = """
def hello():
print("Hello, World!")
普通段落文本。 """
html_output = convert_markdown_to_html(markdown_text)
print(html_output)
代码高亮:如果需要语法高亮,还需要安装 Pygments:
pip install pygments HTML输出:markdown2默认不转义HTML,如果需要安全输出,可以添加 "safe-mode": True到 extras 字典中。
性能考虑:对于大量Markdown处理,markdown2通常比 python-markdown更快。
扩展兼容性:某些扩展可能不兼容,如果遇到问题,可以尝试减少使用的扩展数量。
通过以上方法,你应该能够正确解析包含 ``` 包裹的代码块的Markdown文档。
python markdown2 解析```代码块
发布时间:2025-9-14
分类:技术
标签: Markdown 教程 博客 fastapi python