/ / Documentação Python para django.views.generic com pydoc - python, django, pydoc

Documentação Python para django.views.generic com pydoc - python, django, pydoc

Quando eu executo o comando:

pydoc django.views.generic

Eu recebo o erro:

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

Como posso obter a documentação do pydoc para django.views.generic?

Respostas:

4 para resposta № 1

Importar muitos dos módulos do Django puxa em outros módulos que dependem de estar em um ambiente de projeto do Django. Crie um projeto fictício e use suas configurações.

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

Observe a última linha que define o env var DJANGO_SETTINGS_MODULE para o caminho de importação do arquivo settings.py. Normalmente, você não precisa disso, pois o manage.py e o wsgi.py configuram isso para você, mas o pydoc não sabe nada sobre isso.

Se você já tem um projeto, obviamente você pode pular o projeto fictício e apenas usar as configurações do seu projeto.


Ao usar versões mais recentes do Django, você também precisa chamar django.setup() antes que o Django seja geralmente utilizável. Envolva o pydoc em um script para fazer isso, em vez de chamar o pydoc diretamente.

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 para resposta № 2

Enquanto davidismoresposta funciona para algumas coisas, ele não vai funcionar para meus próprios aplicativos, como eu tenho um AppRegistryNotReady exceção. Eu descobri que precisava fazer algum anúncio nos meus arquivos de aplicativos para que funcionasse:

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

Fonte

Finalmente funciona, pelo menos para views.py. Outros arquivos podem precisar de outras soluções. Isso parece frágil e dependente da versão, mas está funcionando para o Django 1.10.2 e o Python 3.5.2.


sys.argv[0] tem a mesma informação, /usr/lib/python3.5/pydoc.py, para que possa ser realizado de forma mais simples e confiável por:

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