我有一个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 happens
与 item += nodes.paragraph(text)
我得到了一个项目列表,但当我尝试使用nodes.reference(...)时,我得到了一个空子弹的列表。
很明显,我做了一些接近正确的事情,但缺少一些简单的东西。
参考文献应该放在某个容器内,比如段落,并以某种方式表示内部节点。
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]
这段代码可以生成带有文本字段和链接的列表