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
相关产品推荐
相关产品推荐

