mirror of
				https://github.com/django/django.git
				synced 2025-11-04 13:39:16 +00:00 
			
		
		
		
	git-svn-id: http://code.djangoproject.com/svn/django/trunk@14624 bcc190cf-cafb-0310-a4f2-bffc1f526a37
		
			
				
	
	
		
			225 lines
		
	
	
	
		
			6.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			225 lines
		
	
	
	
		
			6.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
How the Django documentation works
 | 
						|
==================================
 | 
						|
 | 
						|
\... and how to contribute.
 | 
						|
 | 
						|
Django's documentation uses the Sphinx__ documentation system, which in turn is
 | 
						|
based on docutils__. The basic idea is that lightly-formatted plain-text
 | 
						|
documentation is transformed into HTML, PDF, and any other output format.
 | 
						|
 | 
						|
__ http://sphinx.pocoo.org/
 | 
						|
__ http://docutils.sourceforge.net/
 | 
						|
 | 
						|
To actually build the documentation locally, you'll currently need to install
 | 
						|
Sphinx -- ``easy_install Sphinx`` should do the trick.
 | 
						|
 | 
						|
.. note::
 | 
						|
 | 
						|
    Building the Django documentation requires Sphinx 1.0.2 or newer. Sphinx
 | 
						|
    also requires the Pygments__ library for syntax highlighting; building the
 | 
						|
    Django documentation requires Pygments 1.1 or newer (a new-enough version
 | 
						|
    should automatically be installed along with Sphinx).
 | 
						|
 | 
						|
__ http://pygments.org
 | 
						|
 | 
						|
Then, building the HTML is easy; just ``make html`` from the ``docs`` directory.
 | 
						|
 | 
						|
To get started contributing, you'll want to read the `reStructuredText
 | 
						|
Primer`__. After that, you'll want to read about the `Sphinx-specific markup`__
 | 
						|
that's used to manage metadata, indexing, and cross-references.
 | 
						|
 | 
						|
__ http://sphinx.pocoo.org/rest.html
 | 
						|
__ http://sphinx.pocoo.org/markup/
 | 
						|
 | 
						|
The main thing to keep in mind as you write and edit docs is that the more
 | 
						|
semantic markup you can add the better. So::
 | 
						|
 | 
						|
    Add ``django.contrib.auth`` to your ``INSTALLED_APPS``...
 | 
						|
 | 
						|
Isn't nearly as helpful as::
 | 
						|
 | 
						|
    Add :mod:`django.contrib.auth` to your :setting:`INSTALLED_APPS`...
 | 
						|
 | 
						|
This is because Sphinx will generate proper links for the latter, which greatly
 | 
						|
helps readers. There's basically no limit to the amount of useful markup you can
 | 
						|
add.
 | 
						|
 | 
						|
Django-specific markup
 | 
						|
----------------------
 | 
						|
 | 
						|
Besides the `Sphinx built-in markup`__, Django's docs defines some extra description units:
 | 
						|
 | 
						|
__ http://sphinx.pocoo.org/markup/desc.html
 | 
						|
 | 
						|
    * Settings::
 | 
						|
 | 
						|
            .. setting:: INSTALLED_APPS
 | 
						|
 | 
						|
      To link to a setting, use ``:setting:`INSTALLED_APPS```.
 | 
						|
 | 
						|
    * Template tags::
 | 
						|
 | 
						|
            .. templatetag:: regroup
 | 
						|
 | 
						|
      To link, use ``:ttag:`regroup```.
 | 
						|
 | 
						|
    * Template filters::
 | 
						|
 | 
						|
            .. templatefilter:: linebreaksbr
 | 
						|
 | 
						|
      To link, use ``:tfilter:`linebreaksbr```.
 | 
						|
 | 
						|
    * Field lookups (i.e. ``Foo.objects.filter(bar__exact=whatever)``)::
 | 
						|
 | 
						|
            .. fieldlookup:: exact
 | 
						|
 | 
						|
      To link, use ``:lookup:`exact```.
 | 
						|
 | 
						|
    * ``django-admin`` commands::
 | 
						|
 | 
						|
            .. django-admin:: syncdb
 | 
						|
 | 
						|
      To link, use ``:djadmin:`syncdb```.
 | 
						|
 | 
						|
    * ``django-admin`` command-line options::
 | 
						|
 | 
						|
            .. django-admin-option:: --traceback
 | 
						|
 | 
						|
      To link, use ``:djadminopt:`--traceback```.
 | 
						|
 | 
						|
An example
 | 
						|
----------
 | 
						|
 | 
						|
For a quick example of how it all fits together, consider this hypothetical
 | 
						|
example:
 | 
						|
 | 
						|
    * First, the ``ref/settings.txt`` document could have an overall layout
 | 
						|
      like this:
 | 
						|
 | 
						|
      .. code-block:: rst
 | 
						|
 | 
						|
        ========
 | 
						|
        Settings
 | 
						|
        ========
 | 
						|
 | 
						|
        ...
 | 
						|
 | 
						|
        .. _available-settings:
 | 
						|
 | 
						|
        Available settings
 | 
						|
        ==================
 | 
						|
 | 
						|
        ...
 | 
						|
 | 
						|
        .. _deprecated-settings:
 | 
						|
 | 
						|
        Deprecated settings
 | 
						|
        ===================
 | 
						|
 | 
						|
        ...
 | 
						|
 | 
						|
    * Next, the ``topics/settings.txt`` document could contain something like
 | 
						|
      this:
 | 
						|
 | 
						|
      .. code-block:: rst
 | 
						|
 | 
						|
        You can access a :ref:`listing of all available settings
 | 
						|
        <available-settings>`. For a list of deprecated settings see
 | 
						|
        :ref:`deprecated-settings`.
 | 
						|
 | 
						|
        You can find both in the :doc:`settings reference document </ref/settings>`.
 | 
						|
 | 
						|
      We use the Sphinx doc_ cross reference element when we want to link to
 | 
						|
      another document as a whole and the ref_ element when we want to link to
 | 
						|
      an arbitrary location in a document.
 | 
						|
 | 
						|
.. _doc: http://sphinx.pocoo.org/markup/inline.html#role-doc
 | 
						|
.. _ref: http://sphinx.pocoo.org/markup/inline.html#role-ref
 | 
						|
 | 
						|
    * Next, notice how the settings are annotated:
 | 
						|
 | 
						|
      .. code-block:: rst
 | 
						|
 | 
						|
        .. setting:: ADMIN_FOR
 | 
						|
 | 
						|
        ADMIN_FOR
 | 
						|
        ---------
 | 
						|
 | 
						|
        Default: ``()`` (Empty tuple)
 | 
						|
 | 
						|
        Used for admin-site settings modules, this should be a tuple of settings
 | 
						|
        modules (in the format ``'foo.bar.baz'``) for which this site is an
 | 
						|
        admin.
 | 
						|
 | 
						|
        The admin site uses this in its automatically-introspected
 | 
						|
        documentation of models, views and template tags.
 | 
						|
 | 
						|
      This marks up the following header as the "canonical" target for the
 | 
						|
      setting ``ADMIN_FOR`` This means any time I talk about ``ADMIN_FOR``, I
 | 
						|
      can reference it using ``:setting:`ADMIN_FOR```.
 | 
						|
 | 
						|
That's basically how everything fits together.
 | 
						|
 | 
						|
TODO
 | 
						|
----
 | 
						|
 | 
						|
The work is mostly done, but here's what's left, in rough order of priority.
 | 
						|
 | 
						|
    * Most of the various ``index.txt`` documents have *very* short or even
 | 
						|
      non-existent intro text. Each of those documents needs a good short intro
 | 
						|
      the content below that point.
 | 
						|
 | 
						|
    * The glossary is very perfunctory. It needs to be filled out.
 | 
						|
 | 
						|
    * Add more metadata targets: there's lots of places that look like::
 | 
						|
 | 
						|
            ``File.close()``
 | 
						|
            ~~~~~~~~~~~~~~~~
 | 
						|
 | 
						|
      \... these should be::
 | 
						|
 | 
						|
            .. method:: File.close()
 | 
						|
 | 
						|
      That is, use metadata instead of titles.
 | 
						|
 | 
						|
    * Add more links -- nearly everything that's an inline code literal
 | 
						|
      right now can probably be turned into a xref.
 | 
						|
 | 
						|
      See the ``literals_to_xrefs.py`` file in ``_ext`` -- it's a shell script
 | 
						|
      to help do this work.
 | 
						|
 | 
						|
      This will probably be a continuing, never-ending project.
 | 
						|
 | 
						|
    * Add `info field lists`__ where appropriate.
 | 
						|
 | 
						|
      __ http://sphinx.pocoo.org/markup/desc.html#info-field-lists
 | 
						|
 | 
						|
    * Add ``.. code-block:: <lang>`` to literal blocks so that they get
 | 
						|
      highlighted.
 | 
						|
 | 
						|
Hints
 | 
						|
-----
 | 
						|
 | 
						|
Some hints for making things look/read better:
 | 
						|
 | 
						|
    * Whenever possible, use links. So, use ``:setting:`ADMIN_FOR``` instead of
 | 
						|
      ````ADMIN_FOR````.
 | 
						|
 | 
						|
    * Some directives (``.. setting::``, for one) are prefix-style directives;
 | 
						|
      they go *before* the unit they're describing. These are known as
 | 
						|
      "crossref" directives. Others (``.. class::``, e.g.) generate their own
 | 
						|
      markup; these should go inside the section they're describing. These are
 | 
						|
      called "description units".
 | 
						|
 | 
						|
      You can tell which are which by looking at in :file:`_ext/djangodocs.py`;
 | 
						|
      it registers roles as one of the other.
 | 
						|
 | 
						|
    * When referring to classes/functions/modules, etc., you'll want to use the
 | 
						|
      fully-qualified name of the target
 | 
						|
      (``:class:`django.contrib.contenttypes.models.ContentType```).
 | 
						|
 | 
						|
      Since this doesn't look all that awesome in the output -- it shows the
 | 
						|
      entire path to the object -- you can prefix the target with a ``~``
 | 
						|
      (that's a tilde) to get just the "last bit" of that path. So
 | 
						|
      ``:class:`~django.contrib.contenttypes.models.ContentType``` will just
 | 
						|
      display a link with the title "ContentType".
 |