Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Sphinx文档中显示字典数据_Python_Python Sphinx - Fatal编程技术网

Python 在Sphinx文档中显示字典数据

Python 在Sphinx文档中显示字典数据,python,python-sphinx,Python,Python Sphinx,我在Python项目源代码中有一个描述默认配置值的字典。这本词典很长。我希望在Sphinx文档中看到除“查看源代码”之外的其他格式的字典,以便人们可以快速检查默认值 当与Sphinx autodoc一起使用时,Sphinx是否提供将类似字典的变量格式化为人类可读格式的选项?我目前正在使用。。automodule::转储整个模块,我在文档中将字典作为一个长字符串转储(没有换行符、漂亮的打印等等),基本上不可读 Sphinx是否提供打印单个源代码变量值的工具 有漂亮的印刷品吗 这可能不是最优雅的解

我在Python项目源代码中有一个描述默认配置值的字典。这本词典很长。我希望在Sphinx文档中看到除“查看源代码”之外的其他格式的字典,以便人们可以快速检查默认值

当与Sphinx autodoc一起使用时,Sphinx是否提供将类似字典的变量格式化为人类可读格式的选项?我目前正在使用
。。automodule::
转储整个模块,我在文档中将字典作为一个长字符串转储(没有换行符、漂亮的打印等等),基本上不可读

  • Sphinx是否提供打印单个源代码变量值的工具

  • 有漂亮的印刷品吗


这可能不是最优雅的解决方案(最好编写一个适当的指令来输出一本打印精美的词典),但目前这是可行的:

将给定的自定义exec指令添加到Sphinx.conf文件中,然后在要打印字典的.rst文件中执行以下操作:

.. 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之前,显然无法嵌入图像,但修复了我现在很高兴。