2

我正在尝试制作一个新的 Sphinx 模板,该模板将为侧边栏创建一个自定义目录树。

使用 Jinja 模板语言,似乎只有一个功能可用:toctree()一次显示所有目录树,但我需要遍历各个目录树项目。

这看起来像这样:

{% for element in toctree_elements %}
    {{ ... display the stuff as wanted }}
{% endfor %}

可能吗?

4

2 回答 2

2

我终于找到了一个技巧,但不是很令人满意。

这会从函数中获取 html 目录树toctree()并删除所有不需要的 html 标记。只保留 URL 和标题,并创建一个数组。

{% set theTocTree = toctree()
    | replace("</a>", "")
    | replace(" href=\"", "></a>")
    | replace("</li>", "</li>;")
    | striptags
    | replace("\">", "%") %}
{% set theTocTree = theTocTree.split(";") %}

然后,以下循环遍历新的 toctree 数组以执行任何需要的操作。

{% for element in theTocTree %}
    {% set el = element.split("%") %}
    {% set url = el[0] | trim | safe %}
    {% set entry = el[1] | trim | safe %}
    ... here, you can use variables url and entry ...
{% endfor %}

这个解决方案是不干净的,因为它依赖于 toctree html 渲染,这可能会在未来的 Sphinx 版本中改变。此外,它不接受字符%;URL 或目录树条目。

于 2015-07-31T15:50:27.543 回答
0

sphinx-contrib/fulltoc的fulltoc.pycontext['toc']通过在事件运行html_page_context时运行来修改。html-page-context

Sphinx 的扩展,使侧边栏显示完整的目录,而不仅仅是本地标题

于 2019-08-26T10:29:32.383 回答