我正在使用 sphinx 并尝试为我的 Django 项目生成文档。我决定首先尝试记录模型,因此在我的 .rst 文件中我这样做了
wdland\.models
==============
.. automodule:: wdland.models
:members:
:undoc-members:
:show-inheritance:
但出现以下错误
WARNING: /home/fabou/wdlandenvpy3/source/docs/wdland.rst:9: (WARNING/2) autodoc: failed to import module 'wdland.models'; the following exception was raised:
Traceback (most recent call last):
File "/home/fabou/wdlandenvpy3/lib/python3.5/site-packages/sphinx/ext/autodoc.py", line 657, in import_object
__import__(self.modname)
File "/home/fabou/wdlandenvpy3/source/wdland/models.py", line 35, in <module>
class Device(models.Model):
File "/home/fabou/wdlandenvpy3/lib/python3.5/site-packages/django/db/models/base.py", line 118, in __new__
"INSTALLED_APPS." % (module, name)
RuntimeError: Model class wdland.models.Device doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
经过一番谷歌搜索后,我在这里找到了解决方案Django 1.9 弃用警告 app_label https://stackoverflow.com/questions/29635765/django-1-9-deprecation-warnings-app-label请参阅 Роман Арсеньев 对“2016 年 1 月 11 日 14:54”的评论
我进入 models.py 并按照上面的帖子将“class Meta: app_label”添加到 models.py 中的每个类中。这解决了问题,我能够使用 sphinx-build 脚本为我的模型生成文档。
现在我想对views.py做同样的事情,并在我的.rst文件中这样做
wdland\.views
=============
.. automodule:: wdland.views
:members:
:undoc-members:
:show-inheritance:
但在编译时,我遇到了这个新的类似错误,并且我无法找到解决方案,也不了解之前对模型的修复。
WARNING: /home/fabou/wdlandenvpy3/source/docs/wdland.rst:19: (WARNING/2) autodoc: failed to import module 'wdland.views'; the following exception was raised:
Traceback (most recent call last):
File "/home/fabou/wdlandenvpy3/lib/python3.5/site-packages/sphinx/ext/autodoc.py", line 657, in import_object
__import__(self.modname)
File "/home/fabou/wdlandenvpy3/source/wdland/views.py", line 2, in <module>
from . import views
File "/home/fabou/wdlandenvpy3/source/wdland/views.py", line 19, in <module>
from .forms import TicketForm, TicketAmendForm
File "/home/fabou/wdlandenvpy3/source/wdland/forms.py", line 1, in <module>
from django.contrib.auth.forms import AuthenticationForm
File "/home/fabou/wdlandenvpy3/lib/python3.5/site-packages/django/contrib/auth/forms.py", line 12, in <module>
from django.contrib.auth.models import User
File "/home/fabou/wdlandenvpy3/lib/python3.5/site-packages/django/contrib/auth/models.py", line 6, in <module>
from django.contrib.contenttypes.models import ContentType
File "/home/fabou/wdlandenvpy3/lib/python3.5/site-packages/django/contrib/contenttypes/models.py", line 139, in <module>
class ContentType(models.Model):
File "/home/fabou/wdlandenvpy3/lib/python3.5/site-packages/django/db/models/base.py", line 118, in __new__
"INSTALLED_APPS." % (module, name)
RuntimeError: Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
这里是sphinx的相关配置
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import django
import os
import sphinx_rtd_theme
import sys
from django.conf import settings
sys.path.insert(0, os.path.abspath('../'))
settings.configure()
django.setup()
wdland 是一个 Django 应用程序,列在设置文件中的 INSTALLED_APPS 元组中。 sphinx docs 文件夹与 wdland 文件夹位于同一级别。
阅读有关该主题的类似线程似乎指向调用时尚未加载的模块。我不知道如何修复,因为在 sphinx 和 Django 中都没有经验。知道如何解决这个问题吗?
尝试记录 urls.py 会产生类似的错误。
EDIT:这是我的观点的开始。py
import datetime
from django.core.urlresolvers import reverse
from django.db.models import Q
from django.http import Http404, HttpResponse
from django.template.loader import render_to_string
from django.shortcuts import render, HttpResponseRedirect
from django.views import generic
from random import randint
from script.serversnmp import get_ubuntu_snmp, get_esxi_snmp
from script.wdlandtools import get_monthly_sess_hour_stats,\
get_monthly_sess_nb_stats,\
get_monthly_ticket_stats,\
get_ticket_category_stats,\
clean_usersession_tbl, update_usertotals_tbl,\
send_email_notification, get_adsl_usage
from wdland.models import Device, UserSession, SupportTicket, News, UserTotals,\
SavedUsrSess
from .forms import TicketForm, TicketAmendForm
from jchart import Chart
from jchart.config import Axes, DataSet, rgba