मेरा पिछला उत्तर विफल रहता है यदि आपके पास सामग्री की तालिका का पदानुक्रम है तो मैंने एक सरल toctree-filt
निर्देश लिखा है जो प्रविष्टि के उपसर्ग के आधार पर प्रविष्टियों को फ़िल्टर करने में सक्षम है। उदाहरण के लिए, एक toctree-filt
निर्देश की तरह
.. toctree-filt::
:maxdepth: 1
user-manual
:internal:supervisor-api
:draft:new-feature
:erik:erik-maths
api
दिया और ['draft','erik']
को अपवर्जन सूची सेट करने में कोई प्रभावी toctree ऐसा दिखता है जैसे
.. toctree-filt::
:maxdepth: 1
user-manual
supervisor-api
api
अपने conf.py
में निम्नलिखित पंक्तियां जोड़ें में परिणाम होगा:
sys.path.append(os.path.abspath('../sphinx-ext/'))
extensions = ['toctree_filter']
toc_filter_exclude = ['draft','erik']
अपनेके बगल में /sphinx_ext
में निम्न कोड डालेंनिर्देशिका:
import re
from sphinx.directives.other import TocTree
def setup(app):
app.add_config_value('toc_filter_exclude', [], 'html')
app.add_directive('toctree-filt', TocTreeFilt)
return {'version': '1.0.0'}
class TocTreeFilt(TocTree):
"""
Directive to notify Sphinx about the hierarchical structure of the docs,
and to include a table-of-contents like tree in the current document. This
version filters the entries based on a list of prefixes. We simply filter
the content of the directive and call the super's version of run. The
list of exclusions is stored in the **toc_filter_exclusion** list. Any
table of content entry prefixed by one of these strings will be excluded.
If `toc_filter_exclusion=['secret','draft']` then all toc entries of the
form `:secret:ultra-api` or `:draft:new-features` will be excuded from
the final table of contents. Entries without a prefix are always included.
"""
hasPat = re.compile('^\s*:(.+):(.+)$')
# Remove any entries in the content that we dont want and strip
# out any filter prefixes that we want but obviously don't want the
# prefix to mess up the file name.
def filter_entries(self, entries):
excl = self.state.document.settings.env.config.toc_filter_exclude
filtered = []
for e in entries:
m = self.hasPat.match(e)
if m != None:
if not m.groups()[0] in excl:
filtered.append(m.groups()[1])
else:
filtered.append(e)
return filtered
def run(self):
# Remove all TOC entries that should not be on display
self.content = self.filter_entries(self.content)
return super().run()
अब बस toctree-filt
के लिए अपने मौजूदा toctree
निर्देशों को बदलने और आप प्रारंभ करने के लिए अच्छा कर रहे हैं। ध्यान दें कि स्फिंक्स त्रुटियों को पोस्ट करेगा क्योंकि यह उन फ़ाइलों को मिलेगा जो दस्तावेज़ में शामिल नहीं हैं। सुनिश्चित नहीं है कि इसे कैसे ठीक किया जाए।
स्रोत
2017-10-06 07:01:11
यह उत्तर मदद कर सकता है: http://stackoverflow.com/a/22024580/407651 – mzjn