Sphinx - 记录Django模型

时间:2012-10-16 10:49:16

标签: django django-models documentation python-sphinx

我正在使用Sphinx来记录我的Django应用程序。

自动生成文档时,我希望Sphinx在文档中添加每个模块的字段。

Sphinx完全跳过了这些。事实上,没有任何领域的痕迹。

有什么想法吗?

詹姆斯

4 个答案:

答案 0 :(得分:6)

你必须使用

@param description

在模型的文档字符串中,对于您希望由sphinx记录的每个字段。

或者另外,你应该看看这个snippet做你想做的事情(减去无聊的写作部分)

[编辑]

如果您打算在django> = 1.6

中使用此代码段
obj._meta._fields() 

已删除,请将其更改为

_meta.fields 

答案 1 :(得分:2)

以上是@Samuele Mattiuzzo提到的片段,更新为支持实际的Django版本(在1.11 LTS上测试):

import inspect
from django.utils.html import strip_tags

def process_docstring(app, what, name, obj, options, lines):
    # This causes import errors if left outside the function
    from django.db import models

    # Only look at objects that inherit from Django's base model class
    if inspect.isclass(obj) and issubclass(obj, models.Model):
        # Grab the field list from the meta class
        fields = obj._meta.fields

        for field in fields:
            # Decode and strip any html out of the field's help text
            help_text = strip_tags(field.help_text)

            # Decode and capitalize the verbose name, for use if there isn't
            # any help text
            verbose_name = field.verbose_name

            if help_text:
                # Add the model field to the end of the docstring as a param
                # using the help text as the description
                lines.append(u':param %s: %s' % (field.attname, help_text))
            else:
                # Add the model field to the end of the docstring as a param
                # using the verbose name as the description
                lines.append(u':param %s: %s' % (field.attname, verbose_name))

            # Add the field's type to the docstring
            lines.append(u':type %s: %s' % (field.attname, type(field).__name__))

    # Return the extended docstring
    return lines


def setup(app):
    # Register the docstring processor with sphinx
    app.connect('autodoc-process-docstring', process_docstring)

只需将其添加到conf.py的末尾,模型字段就会自动添加到文档中。

答案 2 :(得分:0)

如果您打算在django 1.7 +中使用此snippet

  1. 你必须设置你的django项目 django.setup()
  2. 使用 obj._meta.get_fields() 代替: obj._meta._fields()

答案 3 :(得分:0)

这是一个古老的问题。但是对于今天为此绊脚石的人们:

您可以签出与autodoc一起使用的Django的sphinx扩展。它将自动从Django模型中添加所有模型属性以及帮助文本,甚至为相关模型创建链接: