使用sphinx指令创建python中的链接列表

时间:2018-04-11 07:38:44

标签: python python-sphinx restructuredtext

我有一个包含以下内容的第一个文件:

..include:: other_file.rst

和other_file.rst包含类似的内容:

* `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 happens替换item += nodes.paragraph(text),我会得到一个项目列表,但是当我尝试使用nodes.reference(...)时,我会得到一个空子弹列表。

我显然做了一些接近正确的事情,但遗漏了一些简单的事情。

1 个答案:

答案 0 :(得分: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