如何将intersphinx与特定于django的结构(如设置)相关联?

Rei*_*ees 6 django python-sphinx

使用适当的intersphinx设置,您可以从您自己的文档链接到Django类,如下所示:

:class:`django:django.db.models.Model`
Run Code Online (Sandbox Code Playgroud)

但是你如何链接到一个设置?Django使用自己的:setting:构造而不是内置的东西:class:.如何使用intersphinx链接到设置?

我尝试过各种各样的咒语,但都没有用(有些可能是错误的):

:ref:`django:ROOT_URLCONF`
:ref:`django:root_urlconf`
:setting:`django:ROOT_URLCONF`
:ref:`django:setting:ROOT_URLCONF`
:django:setting:`ROOT_URLCONF`
Run Code Online (Sandbox Code Playgroud)

错误喜欢undefined label: django:root_urlconfUnknown interpreted text role "setting"问候我.

Rei*_*ees 9

问题是:我当地的狮身人面像并不知道Django的自定义狮身人面像角色,比如setting.所以这是一个非常精细的intersphinx参考:

:django:setting:`ROOT_URLCONF`
Run Code Online (Sandbox Code Playgroud)

在你告诉Sphinx关于intersphinx目标的自定义角色之前不行.

最后通过从Django的sphinx扩展中复制一个小片段作为_ext/djangodocs.py我的文档旁边的工作:

def setup(app):
    app.add_crossref_type(
        directivename = "setting",
        rolename = "setting",
        indextemplate = "pair: %s; setting",
    )
Run Code Online (Sandbox Code Playgroud)

我将以下内容添加到我的Sphinx中conf.py:

import os
import sys

...

sys.path.append(
    os.path.abspath(os.path.join(os.path.dirname(__file__), "_ext")))
# ^^^ I'll do that neater later on.

extensions = ['djangodocs',
              # ^^^ I added that one.
              'sphinx.ext.autodoc',
              ...
              ]

...
Run Code Online (Sandbox Code Playgroud)

所以:intersphinx可以工作,但是如果你指向一个自定义角色,你需要在本地定义该自定义角色.