使用docutils.core.publish_string代替publish_cmdline时,settings_overrides参数的HTML特定选项无效!

3 投票
1 回答
2016 浏览
提问于 2025-04-16 22:07

下面是我的代码

from docutils.core import publish_string
from docutils.writers.html4css1 import Writer as HisWriter

args = {
    'stylesheet' : '/home/wonder/lab/css/note.css',
    'stylesheet-path' : None,
}

src = 'ccav'
print publish_string(src, writer=HisWriter(), settings_overrides=args)

我遇到了以下错误:

AssertionError: stylesheet and stylesheet_path are mutually exclusive.

所以,我把 args 改成了:

args = {
    'stylesheet-path' : '/home/wonder/lab/css/note.css',
    'stylesheet' : None,
}

现在没有错误了。但是,插入到HTML输出中的样式表并不是 /home/wonder/lab/css/note.css 的内容。它仍然是 /usr/local/lib/python2.7/dist-packages/docutils/writers/html4css1/html4css1.css

也就是说,和在命令行中使用 publish_cmdline 指定选项不同,使用 publish_string 时,带有HTML特定选项的 settings_overrides 参数没有效果。

1 个回答

3
from docutils.core import publish_string
from docutils.writers.html4css1 import Writer as HisWriter

src = 'ccav'
args = {
    'stylesheet_path' : '/path/to/your/stylesheet'

}
print publish_string(src, writer=HisWriter(), settings=None, settings_overrides=args)

你需要把 settings = None 这行代码加上,并且使用 stylesheet_path 而不是 stylesheet,这样才能让它忽略内置的样式表。

补充说明:我发现这个答案是在 distutils 附带的一个示例脚本的源代码里,所以虽然 settings = None 看起来不太好,但实际上并没有问题。

撰写回答