使用 HTML5 writer 删除 docutils 输出中的 docinfo

removing docinfo in docutils output with HTML5 writer

使用 docutils python 库,当使用 html5 编写器时,我无法找到 not 获取文档信息 (源开头的字段)包含在输出中。

这是一个最小的例子:

import docutils.io, docutils.core

SOURCE = '''\
:key: value

Title
========

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At
vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,
no sea takimata sanctus est Lorem ipsum dolor sit amet.
'''

docutils_params = {
    'input_encoding': 'utf-8',
}

pub = docutils.core.Publisher(
    source_class=docutils.io.StringInput,
    destination_class=docutils.io.StringOutput)
pub.set_components('standalone', 'restructuredtext', 'html5')
pub.process_programmatic_settings(None, docutils_params, None)
pub.set_source(SOURCE)
pub.publish()

# same thing with parts['body']
body = pub.writer.parts['fragment']

print(body)

这是输出的第一行:

<dl class="docinfo simple">
<dt class="key">key</dt>
<dd class="key"><p>value</p>
</dd>
</dl>
<div class="section" id="title">
<h1>Title</h1>
<p>Lorem ipsum dolor sit amet,

我不想要的是整个 <dl class="docinfo simple"> 元素。

HTML5 编写器的使用在 pub.set_components(... 行中设置 相反,如果我使用 html 我没有这个问题,但对于我的使用,我需要 HTML5 编写器而不是标准的 HTML 编写器。

奇怪的是,文档似乎说使用 pub.writer.parts['fragment'](或等效的 pub.writer.parts['body'])应该从输出中删除文档信息:

parts['fragment'] contains the document body (not the HTML ). In other words, it contains the entire document, less the document title, subtitle, docinfo, header, and footer.

source: http://docutils.sourceforge.net/docs/api/publisher.html

我是做错了什么还是 docutils 的 HTML5 作者的错误?

我建议您使用 rst2html5 而不是 Docutils:

from rst2html5_ import HTML5Writer
from docutils.core import publish_parts

SOURCE = '''\
:key: value

Title
========

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At
vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,
no sea takimata sanctus est Lorem ipsum dolor sit amet.
'''

parts = publish_parts(writer=HTML5Writer(), source=SOURCE)
print(parts['body'])

这是结果:

<section id="title">
    <h1>Title</h1>
    <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
</section>

Docutils 开发人员将此识别为错误并对其进行了修补。

docutils-users 邮件列表中查看 herehere

很棒,不过,感谢您指向这个包。