【问题标题】:How to link with intersphinx to django-specific constructs (like settings)?如何将 intersphinx 链接到 django 特定的结构(如设置)?
【发布时间】:2012-11-14 20:53:56
【问题描述】:

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

:class:`django:django.db.models.Model`

但是如何链接到设置? 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`

undefined label: django:root_urlconfUnknown interpreted text role "setting" 之类的错误欢迎我。

【问题讨论】:

  • 一种从 intersphinx objects.inv 中提取可用链接目标的方法也会有所帮助。根据文件,部分 zlib 编码和简单的 gunzip/unzip 不起作用。

标签: django python-sphinx


【解决方案1】:

问题:我的本地 sphinx 不知道 Django 的自定义 sphinx 角色,例如 setting。所以像这样一个完美的 intersphinx 参考:

:django:setting:`ROOT_URLCONF`

在您将 intersphinx 目标的自定义角色告知 Sphinx 之前,它不会起作用。

最后通过从Django's sphinx extension 复制一个小的sn-p 作为我的文档旁边的_ext/djangodocs.py 使其工作:

def setup(app):
    app.add_crossref_type(
        directivename = "setting",
        rolename = "setting",
        indextemplate = "pair: %s; setting",
    )

我将以下内容添加到我的 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',
              ...
              ]

...

所以:intersphinx 有效,但如果您指向自定义角色,则需要在本地定义该自定义角色。

【讨论】:

【解决方案2】:

您需要查看 django 的 objects.inv 以确定正确的交叉引用应该是什么。

看来:

:std:setting:`ROOT_URLCONF <django:ROOT_URLCONF>`

应该可以。

不知何故,我有 django 的 objects.inv,但找不到我从中检索到的 URL,理论上它应该是 https://docs.djangoproject.com/en/1.4/objects.inv,但重定向多次最终导致文件未找到错误。

【讨论】:

  • 我尝试了您的建议:不,遗憾的是,仍然是“未知的解释文本角色 'std:setting'”。你是怎么得到那个 std:setting 的?
  • 我从 django (django.readthedocs.org/en/latest/objects.inv) 中转储了 objects.inv。我有一个非常糟糕的 python 脚本来解析 objects.inv (gist.github.com/4118456)
  • 还有一件事:您需要确保链接中的前缀(例如“django”)与您在 conf.py 的 intersphinx_mapping 字典中列出的任何内容相匹配,sphinx 使用它来查找URL,然后从该 URL 检索 objects.inv。
  • intersphinx_mapping = { 'django': ('http://docs.djangoproject.com/en/dev/', 'http://docs.djangoproject.com/en/dev/_objects/')} 其中dev 是最新的开发版本,或者可以替换为您的版本,例如1.6,第一个参数是 url 前缀,第二个参数是要从中获取映射的文件,在这种情况下,它需要 Internet 连接,并由 django 应用程序远程提供,该应用程序呈现 objects.inv 的上下文仅在查询时。
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-28
  • 2022-01-28
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多