首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python-sphinx扩展,如何获取当前对象的名称?

python-sphinx扩展,如何获取当前对象的名称?
EN

Stack Overflow用户
提问于 2018-07-19 20:14:03
回答 1查看 138关注 0票数 0

如何在Python代码中获取父对象的名称,当前文档是为其构建的?我的意思是如何在MyDirective.run()中获得"ExampleCls0“类的名称?

代码语言:javascript
复制
class ExampleCls0():
    """
    .. mydirect::

    """

假设我们有一个名为mydirect的Spring指令。

它在Sphinx中被正确注册,并且文档是为python代码构建的。

代码语言:javascript
复制
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)

对于构建,我使用:

代码语言:javascript
复制
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/",
])
EN

回答 1

Stack Overflow用户

发布于 2018-07-20 05:44:22

我不知道父对象的名称是否可以在Directive.run方法中的某个地方访问,但我发现可以在以后读取该名称。

代码语言:javascript
复制
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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51422451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档