If you’re not using autodoc, building a list of all your documented classes is not that straightforward. Unfortunately, sphinx does not offer any method to embed this list into your documentation. Below, you find a snippet that creates a sorted list of all classes. Here is what the result looks like:
from sphinx.util.compat import Directive
from docutils import nodes
import pdb
class classlist(nodes.General, nodes.Element):
pass
class ClasslistDirective(Directive):
def run(self):
return [classlist('')]
def process_classlist(app, doctree, fromdocname):
env = app.builder.env
para = nodes.paragraph()
py = env.get_domain('py')
classes = [_ for _ in py.get_objects() if _[2] == 'class']
n = dict()
for e in classes:
newnode = nodes.reference('', '')
innernode = nodes.Text(e[0])
newnode['refdocname'] = e[3]
newnode['refuri'] = app.builder.get_relative_uri(
fromdocname, e[3])
newnode['refuri'] += '#' + e[4]
newnode.append(innernode)
n[e[0].lower()] = newnode
for key in sorted(n.iterkeys()):
para += n[key]
para += nodes.Text(' ')
ctx = app.env.config['html_context']
ctx['classlist'] = para
for node in doctree.traverse(classlist):
node.replace_self([para])
continue
def add_classlist_handler(app):
def _print_classlist(**kwargs):
ctx = app.env.config['html_context']
return app.builder.render_partial(ctx['classlist'])['fragment']
ctx = app.env.config['html_context']
if 'print_classlist' not in ctx:
ctx['print_classlist'] = _print_classlist
def setup(app):
app.add_node(classlist)
app.add_directive('classlist', ClasslistDirective)
app.connect('doctree-resolved', process_classlist)
app.connect('builder-inited', add_classlist_handler)
Put this code into a file called “foobar.py” in your sphinx directory and add the “foobar” plugin to your configuration. You can add a classlist to any page by using the ..classlist:: directive or add this snippet as “classlist.html” to your template directory and add the alphabetically sorted list to your sidebar.
{{ print_classlist() }}

One thought on “sphinx: list of classes”
Thank you a lot. However, the approach does not work anymore for SPHINX > 1.7. Could you provide a solution that works with version 1.7.4, too?