如何在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/",
])发布于 2018-07-20 05:44:22
我不知道父对象的名称是否可以在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。
https://stackoverflow.com/questions/51422451
复制相似问题