Python Django admindoc未呈现重构文本
我使用django admindocs进行文档编制,基本功能运行良好(我可以访问文档页面,列出模型并进行文档编制,包括帮助文本等) 不幸的是,DocString中的reStructuredText标记被完全忽略,例如Python Django admindoc未呈现重构文本,python,django,restructuredtext,docstring,Python,Django,Restructuredtext,Docstring,我使用django admindocs进行文档编制,基本功能运行良好(我可以访问文档页面,列出模型并进行文档编制,包括帮助文本等) 不幸的是,DocString中的reStructuredText标记被完全忽略,例如 超链接不会转换为超链接 项目清单不是项目清单 Django标记,例如:model:appname.ModelName未解析 我正在使用Django(1.7)的开发主干版本 下面是我正在使用的docstring示例: class Adresse(models.Model):
- 超链接不会转换为超链接
- 项目清单不是项目清单
- Django标记,例如:model:
未解析appname.ModelName
class Adresse(models.Model):
u"""Postanschrift
Wird für
- Organisationen
- Personen
genutzt.
Siehe auch https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#generic-relations
"""
object_id = models.PositiveIntegerField()
content_type = models.ForeignKey(ContentType)
of = generic.GenericForeignKey('content_type', 'object_id' )
...
当我将上面的docstring内容粘贴到rest编辑器(我使用过)中时,一切都按预期进行
转换适用于docstring文档化方法,例如
def my_method(self):
"""Docstring Heading
1. Listitem 1
2. Listitem 2
refers to :model:`personen.Person`
"""
pass
它被正确地转换了
我确信,我错过了一些非常明显的东西,不是吗?那么admindocs模块的行为与Django 1.4中的行为相同
- 要从python文件自动生成可导航的文档,python Sphinx可能是一种更好的方法,将生成的文件放在另一个伪静态文件夹中。
为此,请将sphinx文档复制到模板文件夹中,并添加一个自定义的
和URL(..)
,该视图提供对文件的访问,并且仅对员工设置了限制(例如,通过canonical decorators视图
和login\u required
)用户权限测试
settings.py
参数restructedText\u FILTER\u设置
请放心,为了激活这些过滤器,django.contrib.markup'
已添加到您的settings.py和模板中的{%load markup%}
中的已安装的应用程序设置中
您应该安装了docutils
。如果未安装,您将不会收到错误。
将linux与bash一起使用时,输入:
if [[ -z `pip freeze | grep docutils` ]]; then sudo easy_install docutils;fi;
直接呈现重组文本:
来自django导入模板的
class Adresse(models.Model):
doc = u"""Postanschrift
Wird für
- Organisationen
- Personen
"""
t = template.Template('{% load markup %}{{ contentstr|restructuredtext }}')
c = template.Context({'contentstr': doc})
__doc__ = t.render(c)
您可以通过在所有[相关]模型及其\uuuuuuu docs\uuuuuu
属性之间循环来自动执行此操作,以便随后将字符串呈现为重构文本,如下所示:
from django.conf import settings
from django.db.models import get_app, get_models
from django import template
for appname in settings.INSTALLED_APPS:
app = get_app(appname )
for model in get_models(app):
if hasattr(model, '__doc__') and model.__doc__ != "":
t = template.Template('{% load markup %}{{ contentstr|restructuredtext }}')
c = template.Context({'contentstr': model.__doc__})
model.__doc__ = t.render(c)
谢谢你详尽的回答!我将深入研究上面提到的选项,并给出对我有用的反馈!