Python 在Sphinx文档中显示字典数据
我在Python项目源代码中有一个描述默认配置值的字典。这本词典很长。我希望在Sphinx文档中看到除“查看源代码”之外的其他格式的字典,以便人们可以快速检查默认值 当与Sphinx autodoc一起使用时,Sphinx是否提供将类似字典的变量格式化为人类可读格式的选项?我目前正在使用Python 在Sphinx文档中显示字典数据,python,python-sphinx,Python,Python Sphinx,我在Python项目源代码中有一个描述默认配置值的字典。这本词典很长。我希望在Sphinx文档中看到除“查看源代码”之外的其他格式的字典,以便人们可以快速检查默认值 当与Sphinx autodoc一起使用时,Sphinx是否提供将类似字典的变量格式化为人类可读格式的选项?我目前正在使用。。automodule::转储整个模块,我在文档中将字典作为一个长字符串转储(没有换行符、漂亮的打印等等),基本上不可读 Sphinx是否提供打印单个源代码变量值的工具 有漂亮的印刷品吗 这可能不是最优雅的解
。。automodule::
转储整个模块,我在文档中将字典作为一个长字符串转储(没有换行符、漂亮的打印等等),基本上不可读
- Sphinx是否提供打印单个源代码变量值的工具
- 有漂亮的印刷品吗
.. exec::
import json
from some_module import some_dictionary
json_obj = json.dumps(some_dictionary, sort_keys=True, indent=4)
print '.. code-block:: JavaScript\n\n %s\n\n' % json_obj
这将在文档中的JavaScript代码块中打印出字典(我发现这是在文档中呈现字典的最佳方式)。如果字典值不是这样计算的,并且人类可读的话
FRUITS = {
"Apple": "Red and Delicious",
# note: eating too much orange make your hands orange
"Orange": "A lot of vitamin C"
}
假设您在fruit.py中定义了上述dict,从第15行开始
然后你可以做:
.. literalinclude:: ../path-to-file/fruit.py
:language: python
:lines: 15-
:linenos:
你会在doc上看到人类可读的值+注释等我需要一个答案,但不喜欢现有的答案,所以我把头撞在墙上,想出了一个不完美但可以接受的解决方案 它使用
pprint.pformat
并直接生成节点,但我不知道如何生成包含交叉引用目标的完整标记,因为它会随着keyrerror:'objtype'
而消亡。如果我尝试添加外层,Sphinx文档没有任何帮助,相关的狮身人面像延伸是迷宫式的
来自导入lib导入模块
从pprint导入pformat
来自docutils.parsers.rst导入指令
从文档导入节点
从sphinx导入addnodes
类预打印指令(指令):
“”“使用pprint.pformat呈现常量并插入文档”“”
必需的参数=1
def运行(自):
模块路径,成员名称=self.arguments[0].rsplit('.',1)
成员\数据=getattr(导入\模块(模块\路径),成员\名称)
代码=pformat(成员数据,2,宽度=68)
文本=节点。文本块(代码,代码)
文字['language']='python'
返回[
addnodes.desc_name(text=member_name),
addnodes.desc_内容(“”,文字)
]
def设置(应用程序):
app.add_指令('pprint',PrettyPrintDirective)
以下是我如何使用它:
.. automodule:: quicktile.__main__
:members:
:exclude-members: XDG_CONFIG_DIR,DEFAULTS,CfgDict
----
.. pprint:: quicktile.__main__.DEFAULTS
(默认值
是一个dict,如果找不到默认值,则用于创建具有默认值的配置文件。)
…下面是它的外观:
你们都知道,我已经做了,但你们不会相信我,因为这实际上是五行进口货。在回复中烤我,但这已经工作了一两个星期,我没有注意到它打破了任何东西 这在
conf.py
中:
from pprint import pformat
def object_description(object) -> str:
return pformat(object, indent=4)
from sphinx.util import inspect
inspect.object_description = object_description
这需要你~呃哦~
变成~嗯哼~
编辑:修复图像b/c获得了足够的~rep~,可以让它们我的最后一个
{
括号字符从代码块中呈现出来。有关如何修复此问题的任何想法?您可能需要添加json_obj=json_obj[:-1]+“}”来呈现最后一个{代码块内的字符。您可以使用标准库模块直接漂亮地打印本机数据结构,而不是序列化到JSON或从JSON反序列化。这是一个好方法;我在此基础上制作了一个变体,它保留了源代码格式。您的图像无法正常工作。在有10个rep之前,显然无法嵌入图像,但修复了我现在很高兴。