我正在尝试从 .md 源文件以编程方式生成 html。
如果我在Remarkable使用 python3 markdown的编辑器中编辑它们,它就可以工作。我的意思是从编辑器导出的 html 是正确的。例如来源
~~~~python
import os, sys
~~~~
Run Code Online (Sandbox Code Playgroud)
产生大约呈现为的 html
import os, sys
Run Code Online (Sandbox Code Playgroud)
但是,当我的 python 脚本尝试呈现文本时,似乎不支持此语法。围栏标签只是出现在输出中,而不是被解析。我基本上是这样做的:
html = markdown.markdown(md_text)
Run Code Online (Sandbox Code Playgroud)
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']
Run Code Online (Sandbox Code Playgroud)
我认为相关的扩展必须存在,因为Remarkable正确处理代码。
如何启用代码防护/语法高亮?
Github 风格的围栏是相同的,即它的工作非常出色,而不是在我的脚本中。块缩进似乎只是做块引用突出显示。
你得到的第一个错误...
AttributeError: module 'markdown.extensions' has no attribute 'fenced_code'
Run Code Online (Sandbox Code Playgroud)
...是因为您尚未导入markdown.extensions.fenced_code:
>>> import markdown.extensions.fenced_code
Run Code Online (Sandbox Code Playgroud)
但是你还有第二个问题,那就是extensions关键字需要一个列表:
>>> markdown.markdown (markdown_text, extensions=markdown.extensions.fenced_code)
TypeError: 'module' object is not iterable
Run Code Online (Sandbox Code Playgroud)
但实际上,该markdown.markdown方法并不需要一个模块:
>>> markdown.markdown (markdown_text, extensions=[markdown.extensions.fenced_code])
TypeError: Extension "builtins.module" must be of type: "markdown.Extension"
Run Code Online (Sandbox Code Playgroud)
您可以按照错误说明进行操作并传入一个类实例,或者您可以将扩展名作为字符串传入并让我们markdown弄清楚:
>>> markdown.markdown (markdown_text, extensions=['fenced_code'])
Run Code Online (Sandbox Code Playgroud)
希望这是显而易见的,但是使用此模型您不需要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']))
Run Code Online (Sandbox Code Playgroud)
请注意,代码突出显示是由codehilite扩展提供的,只有在您还安装了pygments库时才有效。