链接到其他项目¶
启用 sphinx.ext.intersphinx 后,本项目无法解析的引用会到其他项目的清单中查找,即各 Sphinx 或 Guidedog 站点发布的 objects.inv。在 conf.toml 中列出这些项目:
extensions = ["sphinx.ext.intersphinx"]
[intersphinx_mapping]
python = ["https://docs.python.org/3/", ""]
click = ["https://click.palletsprojects.com/", ["click.inv", ""]]
每项包含其他项目的页面地址及清单位置。清单可用 URL、相对于源目录的文件路径,或用 "" 表示页面地址下的 objects.inv。列表按顺序尝试。这是 Sphinx 的 intersphinx_mapping,用 "" 代替 Python 的 None;guidedog migrate 会进行转换。
之后,引用无需特殊写法:
:func:`len`, :class:`list`, and :ref:`tut-packages` link into Python's documentation.
:ref:`click:testing` looks only in Click's inventory.
:external+python:ref:`tut-packages` never looks in this project.
标签和文档链接显示其他项目的标题,并附有“(in Python v3.14)”这样的提示。与 Sphinx 一样,:doc: 引用需指定项目名(:doc:`python:tutorial/index`),因为 intersphinx_disabled_reftypes 默认为 ["std:doc"]。
构建开始时获取清单,并在 _build/.doctrees/__intersphinx_cache__ 中按 intersphinx_cache_limit 缓存若干天(默认 5 天,负值表示保留);本地文件每次构建都读取。与 Sphinx 一样,清单 URL 重定向后采用新目录作为链接基址,缓存也记录此基址,因此使用缓存与首次获取时的链接一致。例如 https://werkzeug.palletsprojects.com/objects.inv 会重定向至 /en/stable/。intersphinx_timeout 以秒限制每次下载。无法访问的项目会给出警告,其引用保持未解析状态。
Guidedog 生成的 objects.inv 包含各页面、标签、术语和对象,其他项目可用相同方式链接到这里。