Как создать документацию sphinx для проекта django
У меня есть проект django, который я документирую с помощью reST в docstrings, чтобы сделать следующее:
- Помогите диагомагам в IDE
- Позже, чтобы создать HTML-документацию, используя Sphinx
Моя документация правильно отображается в среде IDE (PyCharm), однако я не могу настроить Sphinx для создания документации HTML для меня.
Вот структура моего проекта
+--------------------------------------------+
| /saassapp # django project path |
| /docs # dir for sphinx |
| conf.py # sphinx config file |
| ... |
| settings.py # django settings |
| /studyview # django app |
| ...
| ... |
+--------------------------------------------+
Любые идеи? Экземпляром файла conf.py было бы очень полезно. Спасибо.
ИЗМЕНИТЬ
Мое имя проекта - saassapp, а модуль, который я пытаюсь сделать для doc, называется studyview.
Ответы
Ответ 1
Возможности миграции, введенные в Django 1.7, не позволяют предыдущим ответам работать с более новыми версиями. Вместо этого вам придется выполнить ручную настройку. Аналогично всем предыдущим ответам сначала нужно убедиться, что Django может найти ваши настройки, а затем вызовет django.setup()
, который загрузит настройки и настроит ваши модели. Добавьте это в проект Sphinx conf.py:
os.environ['DJANGO_SETTINGS_MODULE'] = 'projectname.settings'
import django
django.setup()
Ответ 2
Добавьте в свой conf.py следующее: вам не нужно будет устанавливать DJANGO_SETTINGS_MODULE каждый раз:
import sys, os
sys.path.append('/path/to/your/project') # The directory that contains settings.py
# Set up the Django settings/environment
from django.core.management import setup_environ
from myproject import settings
setup_environ(settings)
Ответ 3
С Django 1.6 я не мог использовать ответ @MikeRyan, поскольку from django.core.management import setup_environ
устарел. Вместо этого я перешел в файл conf.py и добавил следующее:
import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
os.environ['DJANGO_SETTINGS_MODULE'] = 'dataentry.settings'
from django.conf import settings
Позвольте мне объяснить каждую строку:
- Я использовал относительный путь (два каталога вверх), но вы можете пойти и установить абсолютный путь, если хотите
- Имя моего проекта
dataentry
, а файл settings.py находится внутри этой папки; измените имя (dataentry) на название проекта
Ответ 4
Я думаю, вы должны сделать Sphinx осведомленным о переменной окружения DJANGO_SETTINGS_MODULE. Так что
export DJANGO_SETTINGS_MODULE=mysite.settings
(или что-то нужное для вас)
Затем выполните
make html
в том же сеансе терминала.
Ответ 5
Поздно, но используя Django>=1.9
и sphinx>=1.6.4
, установите путь, эквивалентный проекту BASE_DIR
в conf.py
import django
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
os.environ["DJANGO_SETTINGS_MODULE"] = "project.settings"
django.setup()
Ответ 6
На самом деле вам не нужен отдельный модуль settings
. Иногда бывает проще иметь один (когда тесты и параметры доступа к док-станции), но не требуется.
Это как dj-stripe устанавливает django для sphinx. Ключевым моментом здесь является вызов settings.configure
с INSTALLED_APPS
, поскольку он является единственным необходимым ключом установки (если ваше приложение больше не требует больше):
import django
from django.conf import settings
from django.utils.encoding import force_text
from django.utils.html import strip_tags
import djstripe # noqa
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
# sys.path.insert(0, os.path.abspath('.'))
cwd = os.getcwd()
parent = os.path.dirname(cwd)
sys.path.append(parent)
settings.configure(
INSTALLED_APPS=[
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.sites",
"jsonfield",
"djstripe",
],
SITE_ID=1,
STRIPE_PUBLIC_KEY=os.environ.get("STRIPE_PUBLIC_KEY", ""),
STRIPE_SECRET_KEY=os.environ.get("STRIPE_SECRET_KEY", ""),
)
django.setup()