【发布时间】:2021-01-16 16:10:45
【问题描述】:
使用Sphinx "TODO" Directive example 我想引用嵌入在.rst 文件中的todo 实例。例如,如果 .rst 文件内容包含:
.. todo:: foo
.. todo:: bar
我可以看到以下代码(取自 Sphinx TODO 示例页面)
class TodoDirective(SphinxDirective):
# this enables content in the directive
has_content = True
def run(self):
targetid = 'todo-%d' % self.env.new_serialno('todo')
targetnode = nodes.target('', '', ids=[targetid])
todo_node = todo('\n'.join(self.content))
todo_node += nodes.title(_('Todo'), _('Todo'))
self.state.nested_parse(self.content, self.content_offset, todo_node)
if not hasattr(self.env, 'todo_all_todos'):
self.env.todo_all_todos = []
self.env.todo_all_todos.append({
'docname': self.env.docname,
'lineno': self.lineno,
'todo': todo_node.deepcopy(),
'target': targetnode,
})
return [targetnode, todo_node]
使用ids:todo-0 和todo-1 创建目标节点。
通过将指令嵌入到 .rst 文件中成功引用如下:
.. todolist::
我想做的是引用 .rst 文件中的 todo 项,如下所示:
:ref:`todo-0`
:ref:`todo-1`
这需要获取TodoDirective 来为每个目标节点生成一个标签。我一直不知道该怎么做。
这个简单的项目贴在这里:https://github.com/natersoz/sphinx_sandbox
【问题讨论】:
标签: python python-sphinx docutils