带有pydoc的django.views.generic的Python文档

时间:2014-07-16 05:26:23

标签: python django pydoc

当我运行命令时:

pydoc django.views.generic

我收到错误:

problem in django.views.generic - 
<class 'django.core.exceptions.ImproperlyConfigured'>:
Requested setting DEFAULT_INDEX_TABLESPACE, 
but settings are not configured. You must either define 
the environment variable DJANGO_SETTINGS_MODULE or call 
settings.configure() before accessing settings

如何获取django.views.generic的pydoc文档?

2 个答案:

答案 0 :(得分:4)

导入许多Django模块会引入依赖于Django项目环境的其他模块。创建一个虚拟项目,并使用其设置。

$ django-admin.py startproject dummy
$ cd ./dummy
$ DJANGO_SETTINGS_MODULE=dummy.settings pydoc django.views.generic

请注意将env var DJANGO_SETTINGS_MODULE设置为settings.py文件的导入路径的最后一行。通常,你不需要这个,因为manage.py和wsgi.py为你设置了这个,但是pydoc对此一无所知。

如果您已有项目,显然可以跳过虚拟项目并只使用项目设置。


当使用较新版本的Django时,您还需要在Django通常可用之前调用django.setup()。在脚本中包装pydoc来执行此操作,而不是直接调用pydoc。

my_pydoc.py

import django
import pydoc
import os

os.environ['DJANGO_SETTINGS_MODULE'] = 'dummy.settings'
django.setup()
pydoc.cli()
python my_pydoc.py django.views.generic

答案 1 :(得分:1)

虽然davidism的答案适用于某些内容,但它不适用于我自己的应用,因为我收到了AppRegistryNotReady例外情况。我发现我需要在我的应用文件中做一些广告来实现它:

import sys
importer = sys.modules['__main__'].__spec__
if importer.name == 'pydoc':
    import django
    django.setup()

Source

最后它起作用,至少对于views.py。其他文件可能需要其他解决方案这感觉很脆弱,并且依赖于版本,但它适用于Django 1.10.2和Python 3.5.2。

sys.argv[0]具有相同的信息/usr/lib/python3.5/pydoc.py,因此可以通过以下方式更加简单可靠地完成:

import sys, os
if os.path.splitext(os.path.basename(sys.argv[0]))[0] == 'pydoc':
    import django
    django.setup()