2015-11-10 8 views
8

Ich habe eine Sphinx project mit einer TOC (index.rst), die :maxdepth: 2 enthält. Das Problem ist, ich möchte die Tiefe auf 1 für den release Abschnitt reduzieren, so dass es nicht die Liste der Versionshinweise im Haupt-TOC enthält (die Liste ist zu lang).Ändern Sphinx TOC-Baum

Es scheint, dass die TOC-Liste eines doctree-resolved Ereignishandler verwenden kann geändert werden, aber ich kann nicht herausfinden, wie der TOC-Baum im Ereignishandler zu ändern:

from sphinx import addnodes 

def setup(app): 
    def update_toctree(app, doctree, docname): 
     if docname != 'index': 
      return 

     node = doctree.traverse(addnodes.toctree)[0] 
     toc = app.env.resolve_toctree(docname, app.builder, node) 

     # do something with "toc" here 

    app.connect('doctree-resolved', update_toctree) 
+0

Ran in das gleiche Problem wie Sie - ich bin in der Lage zu lesen und zu ändern TOC-Knoten, aber kann nicht scheinen, die Änderungen persistent zu sein. – geographika

Antwort

1

Ich fand eine Low-Tech-Lösung: verstecken Sie die Kinder des letzten Elements mit CSS.

div.toctree-wrapper > ul > li:last-child > ul { 
    display: none; 
} 
4

Vielleicht keine ideale Lösung, aber ich habe etwas getan, bevor mehrere mit toctree Einträgen auf der gleichen Seite, so etwas wie:

#################### 
Presto Documentation 
#################### 

.. toctree:: 
    :maxdepth: 2 

    overview 
    installation 

.. toctree:: 
    :maxdepth: 1 

    release 

Es ist nicht ideal, da die meisten Themen Pfunde extra zwischen den Bäumen hinzufügen, aber in meinem Fall, das war besser als haben th Die riesige Liste der verschachtelten Elemente für bestimmte Seiten.

+0

Dies ist eine interessante Lösung, aber es hilft in meinem Fall nicht, weil wir "nummeriert" verwenden, also würde das Starten eines neuen Inhaltsverzeichnisses die Nummerierung zurücksetzen. –