1

当我从客户端渲染切换到服务器端渲染时,我遇到了python markdownmarkedjs之间的差异。

考虑以下降价:

**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 输出感到惊讶?

提前致谢!

4

2 回答 2

0

有没有办法配置 python markdown 来优雅地处理这种情况

你可以写一个扩展。Python-Markdown 的扩展 API提供对整个解析器的访问,以便您可以覆盖它的任何部分。因此,如果您想更改行为方式,使得列表开始时不需要空行,您可以blockprocessors用您自己的方式替换相应的行为。

请注意,Python-Markdown 开发人员已明确表示他们对支持 Commonmark 不感兴趣。因此,任何使 Python-Markdown 符合 Commonmark 的工作都需要作为第三方扩展来完成。

关于被识别为重点的列表项,这是一个错误,我刚刚将其报告为问题#783。感谢您提请我们注意。

全面披露:我是 Python-Markdown 的首席开发人员。

于 2019-02-05T14:50:02.210 回答
0

在这种情况下,Python-Markdown 的行为适用于 John Gruber 的原始版本(您可以在Markdown 项目网站上对其进行测试)。可能你可以为 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
于 2019-02-05T15:06:11.333 回答