在 flask 中得到直接支持的 Markdown 渲染库都不太理想,我分别尝试过 Flask-Markdown 和 Flask-Misaka.
抛开性能不谈,这俩支持的语法就很弱鸡。不支持表格,不支持三个反引号定义代码块,整段代码必须缩进4个空格等等。
经过比较,发现 mistune 比较优秀。不过这个库并不能在 flask 中直接使用。当然,自己动手也很简单。
首先通过 pip 安装它:
pip install mistune
在 flask 中引入,并注册。
import mistune
from markupsafe import Markup
md = mistune.create_markdown(escape=True, plugins=[
'strikethrough',
'table',
'url',
'task_lists',
'mark',
'insert',
'superscript',
'subscript'])
app.jinja_env.filters.setdefault('markdown', lambda txt: Markup(md(txt)))
上面声明的 md
实例打开了一些扩展语法的支持。
最后一行将该实例注册成为 app 的 markdown filter.
然后,就可以在模板中引用了:
{{ content|markdown }}