Python markdown强制<ul>而不需要前面的空lin

2024-10-06 08:08:22 发布

您现在位置:Python中文网/ 问答频道 /正文

当我从客户端转换到服务器端呈现时,我遇到了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输出感到惊讶

提前谢谢


Tags: text客户端列表html服务器端li差异item
2条回答

Is there any way to configure python markdown to handle that case gracefully

你可以写一个扩展名。Python Markdown的extension API提供了对整个解析器的访问,这样您就可以重写它的任何部分。因此,如果您想更改bahavior,这样就不需要一个空行来启动一个列表,您可以用自己的替换相应的blockprocessors

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

关于被识别为强调的列表项,这是一个bug,我刚刚报告为issue#783。谢谢你引起我们的注意

完全披露:我是Python Markdown的首席开发人员

在本例中,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)

这将导致:

bold text

  • list item 1
  • list item 2
  • list item 3

相关问题 更多 >