如何引用我自己的sphinx扩展中生成的自定义索引?

时间:2014-10-31 10:53:17

标签: python python-sphinx

我正在开发一个sphinx扩展,其中包含一个这样的自定义索引:

from sphinx.domains import Index

class MyIndex(Index):
    """
    Index subclass to provide the Python module index.
    """

    name = 'funcindex'
    localname = 'Function Index'
    shortname = 'functions'

    def generate(self, docnames=None):

        collapse = False        
        content = []
        for o in self.domain.data['objects']:
            dirtype, name = o
            docname, anchor = self.domain.data['objects'][o]
            entries = [name, 0, docname, anchor, '','','']
            letter = name[0]
            content.append((letter, [entries]))
        return (content, collapse)

def setup(app):
    app.add_index_to_domain('std', MyIndex)

如何引用此索引? 由于sphinx默认生成的indeces列表如下所示:

Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

如何将自己的MyIndex添加到此列表中? Sphinx 确实生成文件std-funcindex.html,看起来不错。我缺少的是一种引用此文件的方法。我尝试了下面的所有组合,但它们不起作用:

:ref:`funcindex`
:ref:`std-funcindex`
:ref:`std_funcindex`

1 个答案:

答案 0 :(得分:2)

不幸的是,在当前版本的Sphinx(1.2.3)中,使用add_index_to_domain时没有添加任何标签。以下代码将手动执行此操作(继续问题中的示例):

def setup(app):
    app.add_index_to_domain('std', MyIndex)
    StandardDomain.initial_data['labels']['funcindex'] = ('std-funcindex', '', 'Function Index')
    StandardDomain.initial_data['anonlabels']['funcindex'] = ('std-funcindex', '')

启用

:ref:`funcindex`

作为自定义索引的参考。