2012-11-14 11 views
6

Con una corretta impostazione intersphinx, è possibile collegare alle classi Django dalla propria documentazione come questo:Come collegarsi con intersphinx a costrutti specifici di django (come le impostazioni)?

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

Ma come si fa a creare un collegamento a un ambiente? Django usa il suo costrutto :setting: invece di qualcosa di built-in come :class:. Come faccio a collegarmi a un'impostazione con intersphinx?

Ho provato vari incantesimi, ma nessuno di lavoro (e alcuni sono probabilmente semplicemente sbagliato):

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

errori come undefined label: django:root_urlconf e Unknown interpreted text role "setting" mi salutano.

+0

Un modo per estrarre i target di collegamento disponibili da un oggetto intersinx objects.inv può essere d'aiuto. È, secondo il file, parzialmente codificato con zlib e semplice gunzip/unzip non ha funzionato. –

risposta

9

Il problema: la mia sfinge locale non conosceva i ruoli personalizzati della sfinge di Django, come setting. Quindi un riferimento intersphinx perfettamente bene così:

:django:setting:`ROOT_URLCONF` 

non funziona fino a quando hai detto Sfinge sul ruolo personalizzato del bersaglio intersphinx.

Alla fine ottenuto che funziona copiando un piccolo frammento da Django's sphinx extension come _ext/djangodocs.py accanto alla mia documentazione:

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

E ho aggiunto il seguente alla mia 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', 
       ... 
       ] 

... 

Così : intersphinx funziona, ma se punti a un ruolo personalizzato, devi avere quel ruolo personalizzato definito localmente.

+0

Sembra che tu possa anche solo definire la funzione setup (app) direttamente nella tua conf.py e farla finita. (Senza doverlo mettere in un file separato, scaricarlo su sys.path ed elencarlo come estensione sfinge.) Http://sphinx-doc.org/config.html#confval-extensions - "La configurazione il file stesso può essere un'estensione, per questo è necessario fornire solo una funzione setup(). " – medmunds

2

È necessario guardare gli oggetti.inv per django per capire quale dovrebbe essere il corretto riferimento incrociato.

sembra che:

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

dovrebbe funzionare.

In qualche modo ho gli oggetti.inv per django ma non riesco a trovare l'URL da cui l'ho recuperato, in teoria dovrebbe essere https://docs.djangoproject.com/en/1.4/objects.inv ma che reindirizza più volte alla fine risultando in un errore non trovato.

+0

Ho provato il tuo suggerimento: no, ancora un "ruolo interpretativo interpretato sconosciuto" std: setting "", purtroppo. Come sei arrivato da quello std: setting? –

+1

Ho scaricato gli oggetti.inv da django (https://django.readthedocs.org/en/latest/objects.inv). Ho uno script python imbarazzante che analizza gli oggetti.inv (https://gist.github.com/4118456) – epc

+0

Un'altra cosa: è necessario assicurarsi che il prefisso nel link (ad esempio "django") corrisponda a qualsiasi cosa hai elencato il dict intersphinx_mapping in conf.py, la sfinge usa quello per cercare l'URL e poi recupera objects.inv da quell'URL. – epc

Problemi correlati