我有一个包含以下内容的第一个文件:
..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(...)时,我会得到一个空子弹列表。
我显然做了一些接近正确的事情,但遗漏了一些简单的事情。
答案 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]
此代码生成带有文本字段和链接的列表