2012-11-14 22 views
6

Với một thiết lập intersphinx thích hợp, bạn có thể liên kết đến các lớp học Django từ tài liệu của riêng bạn như thế này:Làm thế nào để liên kết với intersphinx để xây dựng django cụ thể (như cài đặt)?

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

Nhưng làm thế nào để bạn liên kết đến một khung cảnh? Django sử dụng cấu trúc :setting: của riêng nó thay vì một cái gì đó tích hợp như :class:. Làm thế nào để tôi liên kết với một thiết lập với intersphinx?

Tôi đã thử câu thần chú khác nhau, nhưng công việc không có (và một số có thể là đồng bằng sai):

:ref:`django:ROOT_URLCONF` 
:ref:`django:root_urlconf` 
:setting:`django:ROOT_URLCONF` 
:ref:`django:setting:ROOT_URLCONF` 
:django:setting:`ROOT_URLCONF` 

lỗi như undefined label: django:root_urlconfUnknown interpreted text role "setting" chào đón tôi.

+0

Một cách để trích xuất các mục tiêu liên kết có sẵn từ một đối tượng intersphinx.inv cũng có thể giúp ích. Đó là, theo tập tin, một phần mã hóa zlib và đơn giản gunzip/giải nén không hoạt động. –

Trả lời

9

Vấn đề: nhân sư địa phương của tôi không biết về vai trò nhân sư tùy chỉnh của Django, như setting. Vì vậy, một tham chiếu intersphinx hoàn toàn tốt đẹp như thế này:

:django:setting:`ROOT_URLCONF` 

không hoạt động cho đến khi bạn đã nói với Sphinx về vai trò tùy chỉnh của mục tiêu của intersphinx.

Cuối cùng đã nhận nó làm việc bằng cách sao chép một đoạn nhỏ từ Django's sphinx extension như _ext/djangodocs.py bên cạnh tài liệu của tôi:

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

Và tôi đã thêm dòng sau vào Sphinx của tôi' 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', 
       ... 
       ] 

... 

Vì vậy, : intersphinx hoạt động, nhưng nếu bạn chỉ vào vai trò tùy chỉnh, bạn cần phải có vai trò tùy chỉnh được xác định cục bộ.

+0

Có vẻ như bạn cũng có thể chỉ xác định chức năng thiết lập (ứng dụng) trực tiếp trong conf.py của bạn và được thực hiện với nó. (Không cần phải đặt nó trong một tệp riêng biệt, hãy lấy nó trên sys.path và liệt kê nó như là một phần mở rộng của nhân sư.) Http://sphinx-doc.org/config.html#confval-extensions - "Cấu hình bản thân tệp có thể là một phần mở rộng, vì vậy, bạn chỉ cần cung cấp một hàm setup() trong đó. " – medmunds

2

Bạn cần phải xem xét các đối tượng.inv cho django để tìm ra tham chiếu chéo chính xác sẽ là gì.

Dường như:

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

nên làm việc. Bằng cách nào đó tôi có các đối tượng.inv cho django nhưng không thể tìm thấy URL tôi lấy nó từ, theo lý thuyết nó phải là https://docs.djangoproject.com/en/1.4/objects.inv nhưng chuyển hướng nhiều lần cuối cùng dẫn đến một lỗi tập tin không tìm thấy.

+0

Tôi đã thử đề xuất của bạn: không, vẫn là "vai trò văn bản giải thích không rõ" std: setting '", thật đáng buồn. Làm thế nào bạn đã đi qua std: thiết lập? –

+1

Tôi đã đổ các đối tượng.inv từ django (https://django.readthedocs.org/en/latest/objects.inv). Tôi có một kịch bản python xấu xấu hổ phân tích các đối tượng.inv (https://gist.github.com/4118456) – epc

+0

Một điều nữa: bạn cần đảm bảo rằng tiền tố trong liên kết (ví dụ "django") khớp với bất kỳ điều gì bạn đã liệt kê trong dict intersphinx_mapping trong conf.py, sphinx sử dụng nó để tra cứu URL và sau đó truy lục objects.inv từ URL đó. – epc

Các vấn đề liên quan