Python中markdown包的codehilite扩展导致无法显示小于号<和大于号>的解决方法
想用 Python-makrdown 包把 markdown 文件转换成 html 在网页上显示
markdown 中的有部分内容有
<Post 'learn c'>
<Post 'learn Py'>
<Post 'learn Flask'>
转换后生成的 html 中,对应部分变成了
<pre><code><Post 'learn c'>
<Post 'learn Py'>
<Post 'learn Flask'>
</code></pre>
在网页上这部分内容会正常显示成如下
<Post 'learn c'>
<Post 'learn Py'>
<Post 'learn Flask'>
同样的 markdown 内容,使能 codehilite 扩展后生成的 html 内容变成了
<div class="codehilite"><pre><span></span>&lt;Post 'learn c'&gt;
&lt;Post 'learn Py'&gt;
&lt;Post 'learn Flask'&gt;
</pre></div>
此 html 内容在网页上显示如下
<Post 'learn c'>
<Post 'learn Py'>
<Post 'learn Flask'>
不明白 codehilite 扩展为什么要做这种多余的 escape(),,哪位知道怎么处理??
Python中markdown包的codehilite扩展导致无法显示小于号<和大于号>的解决方法
3 回复
这个问题我遇到过。codehilite扩展默认会把代码块里的<和>转义成HTML实体,导致显示不正常。解决方法是在配置里关掉use_pygments选项,或者用markdown.extensions.fenced_code替代。
import markdown
# 方法1:关掉use_pygments
md = markdown.Markdown(extensions=[
'markdown.extensions.codehilite',
'markdown.extensions.fenced_code'
], extension_configs={
'markdown.extensions.codehilite': {
'use_pygments': False # 关键在这里
}
})
# 方法2:只用fenced_code扩展(更简单)
md = markdown.Markdown(extensions=['markdown.extensions.fenced_code'])
text = '''
```python
def test():
return 1 < 2 and 3 > 0
‘’’
html = md.convert(text) print(html)
两种方法都能让`<`和`>`正常显示。我一般用第二种,因为fenced_code扩展更轻量,而且支持相同的语法高亮功能。
关掉pygments渲染就行了。有使用 jinja2 之类的话可以尝试过滤器 safe
问题找到了,,原来是新版本引入了 bug,,详情在此: https://github.com/Python-Markdown/markdown/issues/725
修复版本还未发布,,下载老版本试了下没有此问题

