如何在Python代码中获取为其创建当前文档的父对象的名称?我的意思是如何在MyDirective.run()中获取类“ ExampleCls0”的名称?
class ExampleCls0():
"""
.. mydirect::
"""
让我们假设我们有一个名为mydirect的Spring指令。
它已在Sphinx中正确注册,并且文档是针对python代码构建的。
class MyDirective(Directive):
required_arguments = 0
optional_arguments = 0
has_content = True
option_spec = {}
def run(self):
env = self.state.document.settings.env
def setup(app):
app.add_directive('mydirect', MyDirective)
对于构建,我正在使用:
from sphinx.cmdline import main as sphinx_main
from sphinx.ext.apidoc import main as apidoc_main
apidoc_main(["--module-first", "--force", "--full",
"--output-dir", "doc/", "."])
sphinx_main(["-b", "html", "-E",
"-c", pwd,
"doc/",
"doc_build/",
])
答案 0 :(得分:0)
我不知道是否可以在Directive.run方法中的某个位置访问父对象的名称,但是我发现以后可以读取该名称。
class SchematicLink(nodes.TextElement):
@staticmethod
def depart_html(self, node):
self.depart_admonition(node)
@staticmethod
def visit_html(self, node):
parentClsNode = node.parent.parent
assert parentClsNode.attributes['objtype'] == 'class'
assert parentClsNode.attributes['domain'] == 'py'
sign = node.parent.parent.children[0]
assert isinstance(sign, desc_signature)
absoluteName = sign.attributes['ids'][0]
print(absoluteName) # file0.ExampleCls0
self.visit_admonition(node)
class MyDirective(Directive):
required_arguments = 0
optional_arguments = 0
def run(self):
schema_node = SchematicLink()
self.state.nested_parse(self.content,
self.content_offset,
schema_node)
return [schema_node]
def setup(app):
app.add_node(SchematicLink,
html=(SchematicLink.visit_html,
SchematicLink.depart_html))
app.add_directive('mydirect', MyDirective)
这可能是一个很好的例子,说明如何不这样做。代码从类doc的标签中读取ID。