Документация Python для django.views.generic с помощью 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
Как я могу получить документацию по pydoc для django.views.generic
?
2 ответа
Импорт многих модулей 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.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
Хотя davidism работает для некоторых вещей, он не будет работать для моих собственных приложений, так как я получил AppRegistryNotReady
исключение. Я обнаружил, что мне нужно сделать некоторую рекламу в файлах приложения, чтобы она заработала:
import sys
importer = sys.modules['__main__'].__spec__
if importer.name == 'pydoc':
import django
django.setup()
Наконец это работает, по крайней мере, для 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()