Sphinx和可重复使用的Django应用程序

Car*_*rel 16 python django documentation python-sphinx

问题

在尝试为可重用的Django应用程序生成sphinx文档时,我发现了以下snafoo.当sphinx解析model.py代码时,它会被试图访问Django 项目设置的代码所阻挠.由于这是一个独立/可重用的应用程序,因此没有提供这些设置的主项目,即没有ROOT/PROJECT/PROJECT/settings.py文件.

建立

为了清楚起见,这就是我所做的.遍历通常的项目文件夹cd ROOT/PROJECT并创建一个生成以下结构的应用程序 django-admin startapp APPLICATION

/ROOT/
  /PROJECT/
    /APPLICATION/ 
      admin.py
      apps.py
      models.py
      tests.py
      views.py
Run Code Online (Sandbox Code Playgroud)

注意:没有/ROOT/PROJECT/PROJECT/*.py文件,因为我没有导航到文件夹cd root并使用通常可能的方式创建项目django-admin createproject.

接下来创建sphinx文档,spinx-quickstart docs生成以下附加结构.

/ROOT/
  /PROJECT/
    /docs/
      /source/ 
        ...
        conf.py
      make.bat
Run Code Online (Sandbox Code Playgroud)

那就是文档旁边的文档APPLICATION.

如果没有文件,我可以放置什么conf.py来正确加载应用程序settings.py

家庭作业

在尝试解决这个问题时,我已经仔细阅读了许多SO问题,博客和Django文档,但没有找到简洁的解决方案.因为这已经被问了几次之前我想要激励它不会被重复关闭,如果建议的副本中的答案使用其中一个片段作为解决方案.

我也提出这个问题相当冗长,因为关于SO的相关问题相当简洁,并不是特别有用.如果有任何帮助我正在使用Django 1.10.

更新

因为我已经发现,如果他们的进口setup从功能setuptoolsdistutils.core一个可以调用安装脚本编译他们的文档作为python setup.py build_sphinx -b BUILDER它可能是最好的调用当再次问这个setup.pydocs/conf.py通过任一make.batMakeFile通过狮身人面像提供.

我怀疑结果会是相似的,即包括所提供的答案,docs/conf.py或者在内部setup.py,但两者都必须在同一个Python会话中调用.

Gre*_*ica 9

如果您不想让您的文档依赖于"演示"项目,那么您可以手动构建您的文档中的设置conf.py.在路径设置部分:

import django
from django.conf import settings
import os
import sys

# add path to sys.path (this might be different in your project)
sys.path.insert(0, os.path.abspath('..'))

# pass settings into configure
settings.configure(
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'my_reusable_app',
        'any_other_dependencies',
    ]
)

# call django.setup to load installed apps and other stuff
django.setup()

# ... continue with rest of conf.py
Run Code Online (Sandbox Code Playgroud)

现在,Sphinx可以在没有项目的情况下导入应用程序模块settings.py.其他设置可以传递给settings.configure().

  • 这是许多django项目中常见的模式,在配置用于测试可重用应用程序的自定义设置时也非常方便. (2认同)
  • 我把你的标记作为正确的答案.我不确定在这种情况下是否退还赏金.谢谢你的回答(感谢贷款). (2认同)