我正在尝试以编程方式从.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风格的击剑是相同的,即它的作用非常出色而不是我的剧本。块缩进似乎只是阻止引用突出显示。
答案 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
库的情况下才会有效。