Python markdown强制执行<ul>,而无需前面的空行

时间:2019-02-05 07:38:53

标签: python html markdown python-markdown

当我从客户端渲染切换到服务器端渲染时,我遇到了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输出感到惊讶吗?

谢谢!

2 个答案:

答案 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
  •