Как создать документацию sphinx для проекта django
у меня есть проект django, который я документирую, используя reST в docstrings, чтобы сделать следующее:
- помощь diagloags в 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 и модуль я пытаюсь сделать документ называется studyview.
- Сфинкс
conf.py
файл:http://pastebin.com/HTYdc1rR - Сфинкс
index
файл:http://pastebin.com/bu1r38TQ - результат
make html
: http://pastebin.com/MWJj94EE
6 ответов
функции миграции, представленные в Django 1.7, не позволяют предыдущим ответам работать с более новыми версиями. Вместо этого вам придется выполнить ручную настройку. Аналогично всем предыдущим ответам, вам сначала нужно убедиться, что Django может найти ваши настройки, а затем позвонить django.setup()
, который загрузит настройки и настройки вашей модели. Добавьте это в свой проект Sphinxconf.py:
os.environ['DJANGO_SETTINGS_MODULE'] = 'projectname.settings'
import django
django.setup()
добавьте к вашему 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)
С 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) к имени вашего проекта
Я думаю, вы должны сделать Sphinx в курсе переменной среды DJANGO_SETTINGS_MODULE. Так что
export DJANGO_SETTINGS_MODULE=mysite.settings
(или что-то правильное значение для вас)
выполнить
make html
в том же терминальном сеансе.
поздно, но с помощью 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()
вам на самом деле не нужен отдельный settings
модуль. Иногда проще иметь один (когда тесты и настройки общего доступа doc), но не требуется.
это как dj-stripe настраивает django для сфинкса. Ключ здесь 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()