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

Python Sphinx如何在conf.py中访问扩展生成的html_context值

问题解答

sphinx-multiversion扩展生成的html_context取值确实是在conf.py被读取执行之后才生成的,你无法直接在conf.py的顶层代码中读取这些值,但可以通过Sphinx的事件回调机制实现你的需求。

核心逻辑说明

Sphinx的启动执行顺序是固定的:

  • 首先读取并执行conf.py的所有顶层代码,完成基础配置初始化
  • 之后加载所有在conf.py中声明启用的扩展,执行扩展的初始化逻辑
  • 最后由扩展向html_context注入对应变量

因此conf.py执行时扩展还未完成初始化,自然无法直接拿到扩展生成的上下文值。

可行实现方案

你可以通过监听Sphinx的config-inited事件实现配置调整,该事件会在所有配置加载完成、所有扩展初始化完成后触发,此时已经可以拿到扩展注入的html_context取值。

代码示例

将以下代码添加到你的conf.py文件中即可:

def adjust_config(app, config):
    # 此处可读取sphinx-multiversion注入的html_context变量
    target_var = config.html_context.get("你需要获取的扩展变量名")
    # 按你的业务逻辑判断后调整配置
    if target_var == "预期值":
        # 示例:修改页面标题配置
        config.html_title = f"{target_var} 版本文档"
        # 也可以修改其他任意Sphinx配置项

def setup(app):
    # 注册事件回调,调低优先级确保扩展逻辑先执行完成
    app.connect("config-inited", adjust_config, priority=200)

如果你的调整仅和模板渲染逻辑相关,也可以直接在模板文件中读取对应html_context变量做分支处理,无需修改conf.py,实现更简单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:15:00