Написание документации¶
Мы придаем большое значение согласованности и читабельности документации. В конце концов, Django был создан в журналистской среде! Поэтому мы относимся к нашей документации так же, как к нашему коду: мы стремимся улучшать ее как можно чаще.
Изменения в документации обычно происходят в двух формах:
Общие улучшения: исправления опечаток, ошибок и улучшенные объяснения за счет более понятного изложения и большего количества примеров.
Новые функции: документация функций, добавленных в фреймворк с момента последнего выпуска.
В этом разделе объясняется, как авторы могут вносить изменения в документацию наиболее полезным и наименее подверженным ошибкам способом.
Процесс документирования Django¶
Хотя документация Django предназначена для чтения в формате HTML на https://docs.djangoproject.com/, мы редактируем ее как набор простых текстовых файлов, написанных на языке разметки reStructuredText для максимальной гибкости.
Мы работаем с версией репозитория, находящейся в разработке, поскольку она имеет самую последнюю и лучшую документацию, а также самый последний и лучший код.
Мы также переносим исправления и улучшения документации, по усмотрению мерджера, в последнюю ветку релиза. Это потому, что выгодно, чтобы документация для последнего релиза была актуальной и правильной (см. Различия между версиями).
В документации Django используется система документации Sphinx, которая, в свою очередь, основана на docutils. Основная идея заключается в том, что слегка отформатированная текстовая документация преобразуется в HTML, PDF и любой другой выходной формат.
Sphinx включает команду sphinx-build для преобразования reStructuredText в другие форматы, например, HTML и PDF. Эту команду можно настраивать, но в документации Django есть Makefile, который предоставляет более короткую команду make html.
Как организована документация¶
Документация разделена на несколько категорий:
Уроки ведут читателя за руку через серию шагов по работе с фреймворком.
Главное в руководстве — помочь читателю достичь чего-то полезного, желательно как можно раньше, чтобы придать ему уверенности.
Объясните суть проблемы, которую мы решаем, чтобы читатель понял, чего мы пытаемся достичь. Не думайте, что вам нужно начинать с объяснений того, как все работает — важно то, что делает читатель», а не то, что вы объясняете. Может быть полезно вернуться к тому, что вы сделали и объяснить потом.
Руководства по темам направлены на объяснение концепции или предмета на достаточно высоком уровне.
Ссылайтесь на справочные материалы, а не повторяйте их. Используйте примеры и объясняйте вещи, которые кажутся вам очень простыми — это может быть объяснение, которое будет полезно кому-то.
Предоставление фонового контекста помогает новичку связать тему с вещами, которые он уже знает.
Справочные руководства содержат технические справочники по API. Они описывают функционирование внутреннего механизма Django и дают указания по его использованию.
Следите за темой справочного материала. Предполагайте, что читатель уже понимает основные концепции, но ему нужно знать или напомнить, как это делает Django.
Справочник — не место для общих объяснений. Если вы обнаружили, что вам сложно объяснять базовые концепции, вы можете перенести этот материал в топики.
Практические руководства - это рецепты, которые проводят читателя через шаги по ключевым темам.
Главное в руководстве по практическим рекомендациям — то, чего хочет достичь пользователь. Руководство по практическим рекомендациям всегда должно быть ориентировано на результат, а не на внутренние детали того, как Django реализует то, что обсуждается.
Эти руководства более продвинуты, чем учебные пособия, и предполагают наличие некоторых знаний о том, как работает Django. Предполагайте, что читатель уже ознакомился с туториалами, и не стесняйтесь отсылать читателя к соответствующему уроку, а не повторять тот же материал.
Как начать работать над документацией¶
Клонируйте репозиторий Django на ваш компьютер¶
Если вы хотите начать вносить вклад в нашу документацию, скачайте дев версию Django из репозитория исходного кода (см. Установка разрабатываемой версии):
$ git clone https://github.com/django/django.git
...\> git clone https://github.com/django/django.git
Если вы планируете отправить эти изменения, вам может быть полезно создать форк репозитория Django и клонировать этот форк.
Настройте виртуальную среду и установите зависимости¶
Создайте и активируйте виртуальную среду, затем установите зависимости:
$ python -m venv .venv
$ source .venv/bin/activate
$ python -m pip install -r docs/requirements.txt
Соберите документацию локально¶
Мы можем создать HTML документации из каталога docs:
$ cd docs
$ make html
...\> cd docs
...\> make.bat html
Ваша локально собранная документация будет доступна по адресу _build/html/index.html и ее можно будет просматривать в любом веб-браузере, хотя она будет оформлена иным образом, чем документация на docs.djangoproject.com. Это нормально! Если ваши изменения хорошо смотрятся на вашей локальной машине, они будут хорошо смотреться и на веб-сайте.
Внесение изменений в документацию¶
Исходные файлы — это файлы .txt, расположенные в каталоге docs/.
Эти файлы написаны на языке разметки reStructuredText. Чтобы изучить разметку, см. справочник reStructuredText.
Чтобы отредактировать эту страницу, нам нужно отредактировать файл docs/internals/contributing/writing-documentation.txt и пересобрать HTML с помощью make html.
Проверка орфографии¶
Перед тем как вы закоммитите свою изменения, неплохо было бы запустить проверку орфографии. Сначала вам нужно будет установить sphinxcontrib-spelling. Затем из каталога docs запустите make spelling. Неправильные слова (если таковые имеются) вместе с файлом и номером строки, где они встречаются, будут сохранены в _build/spelling/output.txt.
Если вы столкнулись с ложноположительными результатами (вывод ошибок, который на самом деле является правильным), выполните одно из следующих действий:
Окружите встроенный код или названия брендов/технологий двойными апострофами (``).
Найдите синонимы, распознаваемые средством проверки орфографии.
Если и только если вы уверены, что слово, которое вы используете, правильное - добавьте его в
docs/spelling_wordlist(пожалуйста, ведите список в алфавитном порядке).
Проверка ссылок¶
Ссылки в документации могут стать нерабочими или измененными, так что они больше не будут канонической ссылкой. Sphinx предоставляет конструктор, который может проверить, работают ли ссылки в документации. Из каталога docs запустите make linkcheck. Вывод выводится на терминал, но его также можно найти в _build/linkcheck/output.txt и _build/linkcheck/output.json.
Записи со статусом «working» в порядке, те, которые «unchecked» или «ignored», пропущены, поскольку они либо не могут быть проверены, либо соответствуют правилам игнорирования в конфигурации.
Записи со статусом «broken» необходимо исправить. Записи со статусом «redirected», возможно, необходимо обновить, чтобы они указывали на каноническое местоположение, например, схема изменилась с http:// на https://. В некоторых случаях мы не хотим обновлять ссылку «redirected», например, переписать так, чтобы она всегда указывала на последнюю или стабильную версию документации, например, /en/stable/ на /en/3.2/.
Стиль письма¶
При использовании местоимений в отношении гипотетического лица, например, «пользовательс сеансовым cookie», следует использовать гендерно-нейтральные местоимения (они/их). Вместо:
он или она… используйте они.
его или ее… используйте их.
his or her… use their.
его или ее… используйте их.
сам или сама… использовать сами.
Старайтесь избегать использования слов, которые преуменьшают сложность задачи или операции, таких как «легко», «просто», и т. д. Опыт людей может не соответствовать вашим ожиданиям, и они могут расстроиться, если не найдут шаг таким «простым» или «прямым», как предполагается.
Часто используемые термины¶
Вот некоторые рекомендации по стилю для терминов, часто используемых в документации:
Django — при упоминании фреймворка пишите Django с заглавной буквы. В коде Python и логотипе djangoproject.com оно пишется строчными буквами.
email — без дефиса.
HTTP — ожидаемое произношение — «Эйч Ти Ти Пи» и поэтому ему должно предшествовать «an», а не «a».
MySQL, PostgreSQL, SQLite
SQL — при упоминании SQL ожидаемое произношение должно быть «Эс Кью Эл», а не «сиквел». Таким образом, в такой фразе, как «Returns an SQL expression», «SQL» должно предшествовать «an», а не «a».
Python — при упоминании языка пишите Python с большой буквы.
realize, customize, initialize и т. д. – используйте американский суффикс «ize», а не «ise»
подкласс — это одно слово без дефиса, как в качестве глагола («подкласс этой модели»), так и в качестве существительного («создать подкласс»).
the web, web framework — пишутся не с заглавной буквы.
website — используйте одно слово без заглавных букв.
Терминология, специфичная для Django¶
model — пишется со строчной буквы.
template — пишется не с заглавной буквы.
URLconf — используйте три заглавные буквы без пробела перед «conf.»
view — пишется не с заглавной буквы.
Руководство по файлам reStructuredText¶
Это руководство определяет формат нашей reST (reStructuredText) документации:
В заголовках разделов пишите с заглавной буквы только первые слова и имена собственные.
Размещайте документацию по 80 символов в ширину, если только пример кода не стал значительно менее читабельным при разделении на две строки или по другой веской причине.
Главное, что следует помнить при написании и редактировании документов, это то, что чем больше семантической разметки вы сможете добавить, тем лучше. Итак:
Add ``django.contrib.auth`` to your ``INSTALLED_APPS``...
Не так полезно, как:
Add :mod:`django.contrib.auth` to your :setting:`INSTALLED_APPS`...
Это потому, что Sphinx сгенерирует правильные ссылки для последнего, что «очень помогает читателям.
Вы можете добавить к цели префикс
~(это тильда), чтобы получить только «последнюю часть» этого пути. Так:mod:`~django.contrib.auth`отобразит ссылку с заголовком «auth».Все блоки кода Python должны быть отформатированы с использованием blacken-docs автоформатера. Он будет запущен
pre-commit, если он настроен.Используйте
intersphinxдля ссылки на документацию Python и Sphinx.Добавьте
.. code-block:: <lang>к буквенным блокам, чтобы они выделились. Предпочитайте автоматическую подсветку с помощью::(два двоеточия). Это имеет то преимущество, что если код содержит недопустимый синтаксис, он не будет выделен. Добавление.. code-block:: python, например, приведет к принудительному выделению, несмотря на недопустимый синтаксис.Для улучшения читабельности используйте
.. admonition:: Descriptive titleвместо.. note::. Используйте эти поля экономно.Используйте следующие стили заголовков:
=== One === Two === Three ----- Four ~~~~ Five ^^^^
Используйте
:rfc:для ссылки на RFC и попытайтесь указать ссылку на соответствующий раздел, если это возможно. Например, используйте:rfc:`2324#section-2.3.2`или:rfc:`Пользовательский текст ссылки <2324#section-2.3.2>`.Используйте
:pep:для ссылки на предложение по улучшению Python (PEP) и постарайтесь указать ссылку на соответствующий раздел, если это возможно. Например, используйте:pep:`20#easter-egg`или:pep:`Easter Egg <20#easter-egg>`.Используйте
:mimetype:для ссылки на тип MIME, если только значение не заключено в кавычки для примера кода.Используйте
:envvar:для ссылки на переменную среды. Вам также может потребоваться определить ссылку на документацию для этой переменной среды с помощью.. envvar::.
Специфическая для Django разметка¶
Помимо встроенной разметки Sphinx, в документации Django определены некоторые дополнительные единицы описания:
Настройки:
.. setting:: INSTALLED_APPS
Чтобы создать ссылку на настройку, используйте
:setting:`INSTALLED_APPS`.Теги шаблонов:
.. templatetag:: regroup
Для ссылки используйте
:ttag:`regroup`.Фильтры шаблонов:
.. templatefilter:: linebreaksbr
Для ссылки используйте
:tfilter:`linebreaksbr`.Поиск по полям (например,
Foo.objects.filter(bar__exact=whatever)):.. fieldlookup:: exact
Для ссылки используйте
:lookup:`exact`.Команды
django-admin:.. django-admin:: migrate
Для привязки используйте
:djadmin:`migrate`.Параметры командной строки
django-admin:.. django-admin-option:: --traceback
Для ссылки используйте
:option:`command_name --traceback`(или опуститеcommand_nameдля параметров, общих для всех команд, например--verbosity).Ссылки на тикеты Trac (обычно зарезервированы для заметок о выпуске патча):
:ticket:`12345`
В документации Django используется специальная директива console для документирования примеров командной строки, включающих django-admin, manage.py, python, и т. д.). В HTML-документации отображается пользовательский интерфейс с двумя вкладкамина одной из вкладок которого отображается командная строка в стиле Unix, а на второй - командная строка Windows.
Например, вы можете заменить этот фрагмент:
use this command:
.. code-block:: console
$ python manage.py shell
этим:
use this command:
.. console::
$ python manage.py shell
Обратите внимание на две вещи:
Обычно вы заменяете вхождения директивы
.. code-block:: console.Вам не нужно менять фактическое содержимое примера кода. Вы по-прежнему пишете его, предполагая среду Unix-y (т. е. символ приглашения
'$','/'`в качестве разделителя компонентов пути файловой системы и т. д.)
Пример выше отобразит блок примера кода с двумя вкладками. Первая покажет:
$ python manage.py shell
(Никаких изменений по сравнению с тем, что отобразил бы .. code-block:: console).
Второй покажет:
...\> py manage.py shell
Документирование новых функций¶
Наша политика в отношении новых функций:
Вся документация по новым функциям должна быть написана таким образом, чтобы четко обозначать функции, доступные только в версии разработки Django. Предположим, что читатели документации используют последнюю версию, а не версию разработки.
Наш предпочтительный способ обозначения новых функций — добавление к документации функций предварительного текста: «.. versionadded:: X.Y», за которым следует обязательная пустая строка и необязательное описание (с отступом).
Общие улучшения или другие изменения в API, на которые следует обратить внимание, должны использовать директиву «.. versionchanged:: X.Y» (с тем же форматом, что и versionadded, упомянутая выше.
Эти блоки versionadded и versionchanged должны быть «самостоятельными»Другими словами, поскольку мы сохраняем эти аннотации только для двух выпусков, было бы неплохо иметь возможность удалить аннотацию и ее содержимое без необходимости переформатировать, изменять отступы или редактировать окружающий текстНапример, вместо того, чтобы помещать все описание новой или измененной функции в блок, сделайте что-то вроде этого:
.. class:: Author(first_name, last_name, middle_name=None)
A person who writes books.
``first_name`` is ...
...
``middle_name`` is ...
.. versionchanged:: A.B
The ``middle_name`` argument was added.
Размещайте измененные аннотации в нижней части раздела, а не в верхней.
Кроме того, избегайте ссылок на конкретную версию Django вне блока versionadded или versionchanged. Даже внутри блока это часто излишне, поскольку эти аннотации отображаются как «Новое в Django A.B:" и «Изменено в Django A.B» соответственно.
Если добавляется функция, атрибут и т. д., также можно использовать аннотацию versionadded, например:
.. attribute:: Author.middle_name
.. versionadded:: A.B
An author's middle name.
Мы можем удалить аннотацию .. versionadded:: A.B без каких-либо изменений отступов, когда придет время.
Минимизация изображений¶
Оптимизируйте сжатие изображений, где это возможно. Для файлов PNG используйте OptiPNG и AdvanceCOMP’s advpng:
$ cd docs
$ optipng -o7 -zm1-9 -i0 -strip all `find . -type f -not -path "./_build/*" -name "*.png"`
$ advpng -z4 `find . -type f -not -path "./_build/*" -name "*.png"`
Это основано на OptiPNG версии 0.7.5. Более старые версии могут жаловаться на опцию -strip all, которая приводит к потерям.
Пример¶
Рассмотрим этот гипотетический пример:
Во-первых, документ
ref/settings.txtможет иметь общую структуру, например, такую:======== Settings ======== ... .. _available-settings: Available settings ================== ... .. _deprecated-settings: Deprecated settings =================== ...
Далее документ
topics/settings.txtможет содержать что-то вроде этого: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>`.
Мы используем элемент перекрестной ссылки Sphinx
doc, когда хотим связать с другим документом в целом, и элементref, когда хотим связать с произвольным местом в документе.Далее обратите внимание на то, как аннотируются настройки:
.. setting:: ADMINS ADMINS ====== Default: ``[]`` (Empty list) A list of all the people who get code error notifications. When ``DEBUG=False`` and a view raises an exception, Django will email these people with the full exception information. Each member of the list should be a tuple of (Full name, email address). Example:: [("John", "john@example.com"), ("Mary", "mary@example.com")] Note that Django will email *all* of these people whenever an error happens. See :doc:`/howto/error-reporting` for more information.
Это помечает следующий заголовок как «canonical» для настройки
ADMINS. Это означает, что всякий раз, когда я говорю оADMINS, я могу ссылаться на нее, используя:setting:`ADMINS`.
Вот так, в принципе, все и работает вместе.
Перевод документации¶
См. Локализация документации Django если вы хотите помочь перевести документацию на другой язык.
Страница руководства django-admin¶
Sphinx может генерировать страницу руководства для команды django-admin. Это настраивается в docs/conf.py. В отличие от других выходных данных документации, эта страница руководства должна быть включена в репозиторий Django и релизы как docs/man/django-admin.1. Нет необходимости обновлять этот файл при обновлении документации, так как он обновляется один раз в процессе релиза.
Чтобы создать обновленную версию страницы руководства, запустите make man в каталоге docs. Новая страница руководства будет записана в docs/_build/man/django-admin.1.