You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sphinx Read the Docs主题侧边栏版本功能启用及配置问题

解决Sphinx Read the Docs主题侧边栏添加versions.html无效及版本声明问题

一、修复versions.html侧边栏不显示的问题

你遇到的html_sidebars设置不生效,大概率是因为Read the Docs(RTD)主题本身自带默认侧边栏配置,直接用**覆盖会和主题内置逻辑冲突。试试这两个方案:

  • 保留主题默认侧边栏,追加versions.html
    不要直接替换所有侧边栏项,先获取主题默认的侧边栏列表,再把versions.html加进去。在conf.py里这么写:
    from sphinx_rtd_theme import get_html_theme_options
    
    # 获取RTD主题默认的侧边栏配置
    default_sidebars = get_html_theme_options().get('sidebars', [])
    # 将versions.html追加到默认侧边栏末尾
    html_sidebars = {
        '**': default_sidebars + ['versions.html']
    }
    
  • 确认versions.html模板存在
    要确保你的项目_templates目录下有versions.html(如果是自定义模板),或者RTD主题自带这个模板。如果是自定义模板,别忘了在conf.py中设置:
    templates_path = ['_templates']
    

二、在conf.py中声明不同版本(无需sphinxcontrib-versioning)

既然sphinxcontrib-versioning不符合需求,这里提供几种手动管理版本的方式:

1. 直接在conf.py中硬编码版本信息

适合版本较少的场景,在conf.py里定义相关变量,供模板调用:

# 当前文档的版本号
version = '1.0'
release = '1.0.1'
# 所有可用的版本列表
available_versions = ['1.0', '0.9', '0.8']
# 标记最新版本
latest_version = '1.0'

然后在自定义的versions.html模板中使用这些变量生成版本链接:

<h3>Versions</h3>
<ul>
  {% for v in available_versions %}
    <li>
      <a href="/docs/{{ v }}/">
        {{ v }}{% if v == latest_version %} (latest){% endif %}
      </a>
    </li>
  {% endfor %}
</ul>

2. 从外部文件加载版本列表

如果版本较多不想硬编码,可以把版本信息存在JSON文件(比如versions.json),再在conf.py中读取:

import json

with open('versions.json', 'r') as f:
    version_data = json.load(f)

available_versions = version_data['versions']
latest_version = version_data['latest']

versions.json的示例内容:

{
  "versions": ["1.0", "0.9", "0.8", "0.7"],
  "latest": "1.0"
}

3. 结合Read the Docs环境变量(托管在RTD平台时)

如果你的文档在Read the Docs平台部署,RTD会自动提供环境变量,可动态获取版本信息:

import os

# 当前构建的版本
version = os.environ.get('READTHEDOCS_VERSION', 'latest')
# 所有可用版本(RTD返回逗号分隔的字符串)
available_versions = os.environ.get('READTHEDOCS_VERSIONS', 'latest').split(',')

在versions.html中可以用RTD的标准链接格式生成跳转:

<h3>Versions</h3>
<ul>
  {% for v in available_versions %}
    <li>
      <a href="https://your-project.readthedocs.io/en/{{ v }}/">
        {{ v }}{% if v == 'latest' %} (latest){% endif %}
      </a>
    </li>
  {% endfor %}
</ul>

内容的提问来源于stack exchange,提问作者Denis Rouzaud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:17:57