如何为django项目构建sphinx文档



我有一个django项目,我使用reST在docstrings文档中做以下操作:

  1. IDE
  2. 中的帮助诊断
  3. 之后使用Sphinx构建HTML文档

我的文档在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。

  • Sphinx conf.py文件:http://pastebin.com/HTYdc1rR
  • Sphinx index文件:http://pastebin.com/bu1r38TQ
  • make html结果:http://pastebin.com/MWJj94EE

Django 1.7中引入的迁移特性可以防止之前的答案在新版本中工作。相反,您将不得不进行手动设置。与前面的答案类似,你首先必须确保Django可以找到你的设置,然后调用django.setup(),它将加载设置并设置你的模型。将此添加到Sphinx项目的conf.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

让我解释每一行:

  1. 我使用了一个相对路径(两个目录向上),但是如果你喜欢,你可以继续使用一个绝对路径
  2. 我的项目名称是dataentrysettings.py文件在该文件夹内;将名称(数据条目)更改为项目名称

我认为您必须让Sphinx知道djjango_settings_module环境变量。

export DJANGO_SETTINGS_MODULE=mysite.settings

(或任何适合你的值)

然后执行

make html

在同一终端会话中。

使用Django>=1.9sphinx>=1.6.4conf.py

中设置等同于项目BASE_DIR的路径
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模块。有时设置一个(当测试和文档共享设置时)更容易,但不是必需的。

这是dj-stripe为sphinx设置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()

最新更新