[英]Sphinx autodoc django not working
我已经开始使用Sphinx进行django项目了,我碰到了一堵砖墙:
模块记录如下:
:mod:`models` Module
--------------------
.. automodule:: userprofile.models
:members:
:undoc-members:
:show-inheritance:
相关代码如下所示:
# models is django.db.models
class ProfileQuerystring(models.Model):
[..]
问题是ProfileQuerystring
没有出现在HTML构建中。 但是,如果我将继承移除到models.Model
(因此该行看起来像class ProfileQuerystring:
并重新构建, class ProfileQuerystring:
记录该类。
这不会发生在代码之上的几行,我从models.Manager
继承。
任何人都可以帮助我或者至少给我一个暗示吗?
后期编辑 :
如果我手动添加它,它的工作原理:
.. automodule:: cinely.userprofile.models
:members:
:undoc-members:
:show-inheritance:
.. autoclass:: cinely.userprofile.models.ProfileQuerystring # <-- note this
因此可以记录该类,但不知何故, automodule
不想这样做。
后期编辑2 :
我试过从Model
删除__metaclass__
属性,但没有任何反应。 此外,由于我已经开始编辑Django源代码,我有机会在控制台上打印一些东西,但什么都没发生。 我可以确认使用了自定义的django,因为我已经卸载了已安装的pip
。
这是一个试探性的答案,可能是错的。 它只是作为一个评论太长了......但是,如果你看一下django源代码,你会注意到Model
和Manager
有一个不同的继承三。 特别是, Model类使用__metaclass__
属性:
经理 :
class Manager(object):
# Tracks each time a Manager instance is created. Used to retain order.
creation_counter = 0
型号 :
class Model(object):
__metaclass__ = ModelBase
_deferred = False
我的猜测(但不过是一个猜测)是当ModelBase
创建类时,它以一种混淆sphinx的方式操纵__module__
属性,使得它无法理解该类是模块models
一部分。
module = attrs.pop('__module__')
new_class = super_new(cls, name, bases, {'__module__': module})
这个假设与您的观察结果一致 - 当明确指定文档类时 - sphinx在生成文档时没有问题。
有帮助吗?
编辑:我刚想到,验证这个假设的一个简单方法是临时注释掉Model
类定义中的__metaclass__
行,看看sphinx是否采用了这种方式...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.