使用sphinx指令从python中创建一个链接列表。

问题描述 投票:5回答:1

我有一个rst文件,其中包含。

..include:: other_file.rst

and other_file.rst contains something like:

* `Text Item 1 <https://link/to/somewhere>`__
* `Text Item 2 <https://link/to/somewhere_else>`__

现在我预先生成 other_file.rst 然后运行 sphinx -build 来生成最终的 HTML。

我想做的是改变这种情况,让我有一个自定义的Sphinx指令来为我生成列表。

比如说

from docutils import nodes
from docutils.parsers.rst import Directive
class MyDirective(Directive):
    def run(self):
        my_nodes = node.bullet_list(bullet='*')
        for text, ref in [('Text Item 1', 'https://link/to/somewhere'),
                          ('Text Item 2', 'https://link/to/somewhere_else')]:
            item = nodes.list_item()
            # Magic happens
            my_nodes.append(item)
        return [my_nodes]

如果我替换掉 # Magic happensitem += nodes.paragraph(text) 我得到了一个项目列表,但当我尝试使用nodes.reference(...)时,我得到了一个空子弹的列表。

很明显,我做了一些接近正确的事情,但缺少一些简单的东西。

python python-sphinx restructuredtext
1个回答
0
投票

参考文献应该放在某个容器内,比如段落,并以某种方式表示内部节点。

    def run(self):
        my_nodes = nodes.bullet_list(bullet='*')
        for text, ref in [('Text Item 1', 'https://link/to/somewhere'),
                          ('Text Item 2', 'https://link/to/somewhere_else')]:
            item = nodes.list_item()
            # Magic happens
            para = nodes.paragraph(text=text)
            refnode = nodes.reference('', '', internal=False, refuri=ref)
            innernode = nodes.emphasis("link", "link")
            refnode.append(innernode)
            para += refnode
            item += para
            my_nodes.append(item)
        return [my_nodes]

这段代码可以生成带有文本字段和链接的列表

generation result

© www.soinside.com 2019 - 2024. All rights reserved.