当我从客户端渲染切换到服务器端渲染时,我遇到了python markdown和markedjs之间的差异。
考虑以下标记:
**bold text**
* list item 1
* list item 2
* list item 3
markedjs会从中优雅地创建一个无序列表html列表:
<p>
<strong>bold text</strong>
</p>
<ul>
<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
</ul>
python-markdown创建时:
<p>
<strong>bold text</strong>
<em> item1</em> item2
* item3
</p>
这里的问题似乎是python-markdown(紧随markdown.pl之后)不会接受缺少的空行,并使用粗体标签将第一个列表项考虑在内...
有什么方法可以配置python markdown来优雅地处理这种情况,即用户不会对奇怪的html输出感到惊讶吗?
谢谢!
答案 0 :(得分:0)
有什么方法可以配置python markdown来优雅地处理这种情况
您可以编写扩展名。 Python-Markdown的extension API提供了对整个解析器的访问,因此您可以覆盖它的任何部分。因此,如果您要更改行为以使列表开始时不需要空行,则可以用自己的blockprocessors
代替。
请注意,Python-Markdown开发人员明确stated对支持Commonmark不感兴趣。因此,任何使Python-Markdown符合Commonmark的工作都需要作为第三方扩展来完成。
关于列表项被认为是重点,这是一个错误,我刚刚将其报告为问题#783。感谢您引起我们的注意。
完全公开:我是Python-Markdown的首席开发人员。
答案 1 :(得分:0)
在这种情况下,Python-Markdown的行为适用于John Gruber的原始行为(您可以在Markdown projects website进行测试)。可能您可以编写Python-Markdown扩展来更改行为。
您也可以看看python-markdown2,他们有一个选项来更改解析器的行为以接受没有换行符的列表(拥挤的列表):
import markdown2
md_text = "**bold text**
* list item 1
* list item 2
* list item 3"
md = markdown2.markdown(md_text, extras=['cuddled-lists'])
print(md)
结果是:
粗体
- 列出项目1
- 列出项目2
- 列出项目3