【问题标题】:Sphinx autodoc django not working狮身人面像 autodoc django 不工作
【发布时间】:2011-12-21 16:50:50
【问题描述】:

我已经开始在 django 项目中使用 Sphinx,但遇到了困难:

这些模块是这样记录的:

: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:)并重新构建,则该类将被记录。

这不会发生在我从 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安装的。

【问题讨论】:

  • 好问题 (+1)...我没有答案,我会尝试使用 autodoc defaults。它们可能不是问题,但在我脑海中,这些是我首先想到的...... :(
  • 不确定this 是否有帮助,至少想发布链接。
  • @mac 感谢您的帮助,但不幸的是我无法修复它

标签: python django python-sphinx


【解决方案1】:

这是一个试探性的答案,它可能是错误的。只是太长了,不能作为评论...但是,如果您查看 django 源代码,您会注意到 ModelManager 具有不同的继承三。特别是,Model 类使用了__metaclass__ 属性:

Manager:

class Manager(object):
    # Tracks each time a Manager instance is created. Used to retain order.
    creation_counter = 0

Model:

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 是否采用这种方式起来……

【讨论】:

  • 感谢您的帮助;不幸的是它不起作用(请参阅我的编辑)
  • @GabiPurcaru - 你能发布(或链接到)ssccee 我们可以试验吗?这是一个试图解决的迷人难题! :)
  • 很抱歉没有早点回答这个问题;我已经尝试过但无法隔离问题(当我在一个干净的 django 项目上尝试它时它工作)。鉴于您为帮助我所做的努力,我将接受您的回答。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多