Python 3 markdown to html:如何启用代码屏蔽/语法高亮显示

时间:2017-09-06 19:40:58

标签: python markdown

我正在尝试以编程方式从.md源文件生成html。

如果我在Remarkable编辑器中编辑它们,它使用python3 markdown就可以了。我的意思是从编辑器导出的html是正确的。例如来源

~~~~python
import os, sys
~~~~

产生html,大致呈现为

import os, sys

但是,当我的python脚本尝试呈现文本时,此语法似乎不受支持。 fencing标记只出现在输出中而不是被解析。我基本上这样做:

html = markdown.markdown(md_text)

Python似乎无法识别fenced_code扩展名:

>>> markdown.markdown (markdown_text, extensions=markdown.extensions.fenced_code)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'markdown.extensions' has no attribute 'fenced_code'
>>> dir (markdown.extensions)
['Extension', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'parseBoolValue', 'unicode_literals', 'warnings']

我认为相关扩展必须在那里,因为Remarkable正在正确处理代码。

如何启用代码屏蔽/语法突出显示?

Github风格的击剑是相同的,即它的作用非常出色而不是我的剧本。块缩进似乎只是阻止引用突出显示。

1 个答案:

答案 0 :(得分:4)

你得到的第一个错误......

AttributeError: module 'markdown.extensions' has no attribute 'fenced_code'

...是因为您尚未导入markdown.extensions.fenced_code

>>> import markdown.extensions.fenced_code

但是你有第二个问题,即extensions关键字采用一个列表:

>>> markdown.markdown (markdown_text, extensions=markdown.extensions.fenced_code)
TypeError: 'module' object is not iterable

但实际上,markdown.markdown方法并不期望一个模块:

>>> markdown.markdown (markdown_text, extensions=[markdown.extensions.fenced_code])
TypeError: Extension "builtins.module" must be of type: "markdown.Extension"

您可以执行错误所说的内容并传入类实例,或者只需将扩展名称作为字符串传递,然后让markdown弄清楚:

>>> markdown.markdown (markdown_text, extensions=['fenced_code'])

希望这很明显,但使用此模型您不需要使用此机制导入markdown.extensions.fenced_code,因为您从不使用模块名称。也就是说,这是一个完整的例子:

#!/usr/bin/python3

import markdown

markdown_text = '''# This is a test

~~~~python
import os, sys
~~~~
'''

print(markdown.markdown(markdown_text,
                        extensions=['fenced_code', 'codehilite']))

请注意,代码突出显示由codehilite扩展程序提供,只有在您安装了pygments库的情况下才会有效。