Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
优化Sphinx文档树显示:精简侧边栏模块路径_创想鸟

优化Sphinx文档树显示:精简侧边栏模块路径

优化sphinx文档树显示:精简侧边栏模块路径

本文旨在解决使用Sphinx的autodoc和autosummary扩展生成文档时,侧边栏导航树中模块和对象显示冗余完整路径的问题,尤其在使用pydata_sphinx_theme或sphinx_book_theme等主题时。通过修改自定义autosummary模板,利用Jinja2的字符串处理功能,将模块全名精简为仅显示其末尾部分,从而大幅提升文档导航的清晰度和用户体验。

问题背景:冗余的模块全路径显示

在使用Sphinx结合autodoc和autosummary扩展自动生成Python项目文档时,一个常见的问题是,在文档的侧边栏(或目录树,ToC)中,模块、函数或类的名称会默认显示其完整的Python导入路径,例如 my_package.my_python_module1.function_A。这对于大型项目而言,会导致侧边栏显得冗长且难以阅读,降低了导航效率。

以下是一个典型的项目结构及其默认生成的文档树示例:

项目代码结构:

├───my_package│   └───my_python_module1 (包含 function_A)│   └───my_directory│       └───my_python_module2 (包含 function_B)

默认生成的文档树(侧边栏):

├───my_package│   └───my_package.my_python_module1│          └───my_package.my_python_module1.function_A│   └───my_package.my_directory│       └───my_package.my_directory.my_python_module2│              └───my_package.my_directory.my_python_module2.function_B

期望的文档树(侧边栏):

├───my_package│   └───my_python_module1│          └───function_A│   └───my_directory│       └───my_python_module2│              └───function_B

尽管Sphinx提供了 add_module_names = False 配置项,但它主要影响文档页面内部的引用显示,对于 pydata_sphinx_theme 或 sphinx_book_theme 等主题所生成的侧边栏导航树,该设置通常无效。因此,我们需要一种更直接的方式来控制 autosummary 生成的条目名称。

解决方案:定制Autosummary模板

解决此问题的核心在于定制 autosummary 扩展所使用的Jinja2模板。autosummary 在生成每个模块、类或函数的文档页面时,会使用一个模板来渲染其内容,包括页面标题和内部结构。通过修改模板中用于显示名称的部分,我们可以实现路径精简。

关键的修改点在于利用Jinja2模板引擎的字符串处理能力,将完整的模块路径 (fullname) 分割并只取其最后一部分。

步骤一:创建或修改自定义模板文件

在你的Sphinx项目 source 目录下(或你配置的 templates_path 目录下),创建一个名为 _templates/autosummary/custom-module-template.rst 的文件。如果已经有类似的自定义模板,直接修改即可。

将以下内容复制到 custom-module-template.rst 文件中。请注意,核心改动在于文件的第一行:

{{ fullname.split('.')[-1] | escape | underline}}  {# 核心修改:仅显示名称的最后一部分 #}.. automodule:: {{ fullname }}   {% block attributes %}   {% if attributes %}   .. rubric:: Module attributes   .. autosummary::      :toctree:   {% for item in attributes %}      {{ item }}   {%- endfor %}   {% endif %}   {% endblock %}   {% block functions %}   {% if functions %}   .. rubric:: {{ _('Functions') }}   .. autosummary::      :toctree:      :nosignatures:   {% for item in functions %}      {{ item }}   {%- endfor %}   {% endif %}   {% endblock %}   {% block classes %}   {% if classes %}   .. rubric:: {{ _('Classes') }}   .. autosummary::      :toctree:      :template: custom-class-template.rst {# 如果有自定义类模板,这里保持不变 #}      :nosignatures:   {% for item in classes %}      {{ item }}   {%- endfor %}   {% endif %}   {% endblock %}   {% block exceptions %}   {% if exceptions %}   .. rubric:: {{ _('Exceptions') }}   .. autosummary::      :toctree:   {% for item in exceptions %}      {{ item }}   {%- endfor %}   {% endif %}   {% endblock %}{% block modules %}{% if modules %}.. autosummary::   :toctree:   :template: custom-module-template.rst {# 确保这里引用的是当前模板,以实现递归应用 #}   :recursive:{% for item in modules %}   {{ item }}{%- endfor %}{% endif %}{% endblock %}

核心修改解析:

{{ fullname.split(‘.’)[-1] | escape | underline}}

fullname: 这是Jinja2模板中由autosummary提供的一个变量,代表当前模块、函数或类的完整导入路径(例如 my_package.my_python_module1.function_A)。.split(‘.’): 这是一个字符串方法,将 fullname 字符串以点号 . 为分隔符进行分割,返回一个字符串列表。例如,”my_package.my_python_module1.function_A”.split(‘.’) 会得到 [‘my_package’, ‘my_python_module1’, ‘function_A’]。[-1]: 这是Python列表的索引操作,表示获取列表的最后一个元素。因此,split(‘.’)[-1] 会提取出 function_A。| escape: Jinja2过滤器,用于HTML转义,防止潜在的安全问题或渲染错误。| underline: Jinja2过滤器,通常用于在Sphinx中为标题生成下划线,使其符合reStructuredText的标题格式。

通过这一行代码,无论 fullname 是模块、函数还是类的完整路径,其在侧边栏和页面标题中显示的都将是其最终的短名称。

步骤二:在 conf.py 中配置 templates_path

确保你的 conf.py 文件中正确配置了 templates_path,指向包含你自定义模板的目录。例如:

# conf.pyimport osimport syssys.path.insert(0, os.path.abspath('.')) # 确保你的项目路径被Sphinx识别# ... 其他配置 ...templates_path = ['_templates'] # 指向你的自定义模板目录

步骤三:在 rst 文件中引用自定义模板

在你的主 rst 文件(例如 index.rst 或 modules.rst)中,当你使用 autosummary 指令来生成模块列表时,确保通过 :template: 选项引用你创建的自定义模板:

.. toctree::   :maxdepth: 2   :caption: Contents:.. autosummary::   :toctree: _autosummary   :template: custom-module-template.rst   :recursive:   my_package

这里的 :toctree: _autosummary 会在 _autosummary 目录下生成对应的 rst 文件,而 :template: custom-module-template.rst 则确保这些生成的 rst 文件内容(包括它们的标题,进而影响侧边栏显示)会使用你定制的模板。:recursive: 选项则允许 autosummary 递归地发现并文档化子模块。

注意事项与最佳实践

模板作用域: 此解决方案主要针对 autosummary 指令生成的文档条目。如果你希望类 (classes) 或函数 (functions) 等也只显示短名称,你需要确保它们的 autosummary 指令也使用了类似的自定义模板(例如 custom-class-template.rst,并在其中进行相同的 fullname.split(‘.’)[-1] 修改)。在提供的 custom-module-template.rst 中,classes 块已经引用了 custom-class-template.rst,你需要确保这个模板也做了相应修改。主题兼容性: 这种模板定制方法与主题无关,因为它直接修改了 autosummary 生成的reStructuredText内容。因此,它对 pydata_sphinx_theme、sphinx_book_theme 或其他任何主题都有效。名称唯一性: 虽然精简路径提升了可读性,但在极少数情况下,如果你的项目中存在不同模块下拥有相同短名称的函数或类(例如 module_a.utils.helper 和 module_b.utils.helper),精简后可能导致侧边栏中的名称不唯一。在大多数良好设计的Python项目中,这种情况不常见,或者可以通过其父模块的名称来区分。维护: 定制模板意味着你需要自行维护这部分代码。当Sphinx或autosummary扩展更新时,虽然核心的 fullname 变量通常保持不变,但仍需留意是否有潜在的兼容性问题。

总结

通过简单地修改 autosummary 的Jinja2模板,利用 fullname.split(‘.’)[-1] 表达式,我们可以有效地将Sphinx文档侧边栏中冗余的模块全路径精简为简洁的短名称。这不仅显著提升了文档的视觉整洁度,也极大改善了用户在大型项目文档中的导航体验,使其更加直观和高效。这种方法提供了一个强大且灵活的途径来定制Sphinx的输出,以满足特定的项目需求和审美偏好。

以上就是优化Sphinx文档树显示:精简侧边栏模块路径的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1367306.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Python文件时间戳获取指南:使用os.stat()的正确方法
上一篇 2025年12月14日 07:49:56
Python函数如何用函数处理数组中的简单数据 Python函数列表处理的基础应用教程​
下一篇 2025年12月14日 07:50:01

相关推荐

  • 公众号如何进行用户画像分析_公众号用户画像分析的实用技巧

    公众号如何进行用户画像分析_公众号用户画像分析的实用技巧公众号如何进行用户画像分析_公众号用户画像分析的实用技巧公众号如何进行用户画像分析_公众号用户画像分析的实用技巧公众号如何进行用户画像分析_公众号用户画像分析的实用技巧

    通过分析用户属性、互动行为、问卷反馈及第三方工具,可构建动态更新的公众号用户画像。首先利用后台数据掌握性别、年龄、地域等基础特征;再结合文章阅读、点赞、分享行为提炼兴趣标签;随后通过问卷收集职业、需求等主观信息,形成典型用户原型;接着运用RFM模型对用户分层,识别高价值群体;最后每月定期更新画像,确…

    2026年9月24日 • 用户投稿
    200
  • AI开发平台有哪些_好用的AI开发平台大全

    AI开发平台有哪些_好用的AI开发平台大全AI开发平台有哪些_好用的AI开发平台大全AI开发平台有哪些_好用的AI开发平台大全AI开发平台有哪些_好用的AI开发平台大全

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ Coze:提供大量AI智能体免费使用,已集成DeepSeek满血版 SiliconFlow:专注于生成式AI计算的基础设施平台 码上飞:支持免费生成小程序/APP/网页,通过一句话快速生成应用 …

    2026年9月24日 • 用户投稿
    100
  • Java Optional与可空集合排序:深度解析与高效实践

    Java Optional与可空集合排序:深度解析与高效实践Java Optional与可空集合排序:深度解析与高效实践Java Optional与可空集合排序:深度解析与高效实践Java Optional与可空集合排序:深度解析与高效实践

    本文探讨了在Java中处理嵌套可空对象及列表排序的常见问题,特别是Optional的错误用法。强调了通过良好设计避免可空集合的重要性,并提供了在无法修改现有结构时,利用Stream.ofNullable()和Stream.mapMulti()进行安全高效排序的解决方案。旨在提升代码健壮性和可读性。 …

    2026年9月24日 • 用户投稿
    000
  • sublime怎么配置LSP(Language Server Protocol)_sublime语言服务器协议配置方法

    sublime怎么配置LSP(Language Server Protocol)_sublime语言服务器协议配置方法sublime怎么配置LSP(Language Server Protocol)_sublime语言服务器协议配置方法sublime怎么配置LSP(Language Server Protocol)_sublime语言服务器协议配置方法sublime怎么配置LSP(Language Server Protocol)_sublime语言服务器协议配置方法

    首先安装LSP插件,再配置语言服务器;以Python为例,通过pip安装pylsp并在LSP设置中添加客户端配置,保存后打开.py文件即可启用服务。 在 Sublime Text 中配置 LSP(Language Server Protocol)可以大幅提升代码补全、跳转定义、悬停提示等开发体验。下…

    2026年9月24日 • 用户投稿
    000
  • windows怎么安装visual c++运行库_visual c++运行库安装教程

    windows怎么安装visual c++运行库_visual c++运行库安装教程windows怎么安装visual c++运行库_visual c++运行库安装教程windows怎么安装visual c++运行库_visual c++运行库安装教程windows怎么安装visual c++运行库_visual c++运行库安装教程

    首先安装Visual C++运行库可解决“找不到vcruntime140.dll”问题,具体步骤包括:一、从微软官网下载对应系统版本的Visual C++ Redistributable安装包,推荐安装2015-2022版;二、可选使用可信的第三方VC++合集工具快速部署多版本运行库;三、通过Win…

    2026年9月24日 • 用户投稿
    000
  • Java中自定义日志器的简化与自动化:避免重复声明

    Java中自定义日志器的简化与自动化:避免重复声明Java中自定义日志器的简化与自动化:避免重复声明Java中自定义日志器的简化与自动化:避免重复声明Java中自定义日志器的简化与自动化:避免重复声明

    本文探讨了在Java应用中,尤其是在不能使用Lombok或Spring等流行框架时,如何简化自定义日志器(如MXLogger)的声明和初始化。我们将介绍通过自定义工厂、基类继承和静态工具方法来减少重复代码,并深入分析在“简单Java”环境下实现纯注解驱动自动注入的复杂性,提供实用的解决方案。 挑战:…

    2026年9月24日 • 用户投稿
    000
  • Rest Assured JSONPath 泛型值提取:构建可重用工具函数

    Rest Assured JSONPath 泛型值提取:构建可重用工具函数Rest Assured JSONPath 泛型值提取:构建可重用工具函数Rest Assured JSONPath 泛型值提取:构建可重用工具函数Rest Assured JSONPath 泛型值提取:构建可重用工具函数

    本教程探讨如何在Rest Assured中构建一个泛型工具函数,以实现从JSON响应中安全地提取指定类型的值。针对直接使用T.class的常见误区,文章提供了正确的解决方案:通过将Class作为参数传入,从而克服Java泛型类型擦除的限制,确保在运行时提供正确的类型信息,提升代码的灵活性和可重用性。…

    2026年9月24日 • 用户投稿
    000
  • Java中实现跨类和函数共享变量的指南

    Java中实现跨类和函数共享变量的指南Java中实现跨类和函数共享变量的指南Java中实现跨类和函数共享变量的指南Java中实现跨类和函数共享变量的指南

    本教程将详细介绍在Java中如何创建可在所有类和函数中访问的共享变量。通过利用public static关键字,我们可以定义类级别的变量,实现全局共享状态。文章将提供声明、访问示例,并讨论使用此类变量时的最佳实践和注意事项,确保代码的可维护性和健壮性。 理解共享变量的需求 在java应用程序开发中,…

    2026年9月24日 • 用户投稿
    100
  • 使用 Rest Assured 创建泛型 JSONPath 值提取函数

    使用 Rest Assured 创建泛型 JSONPath 值提取函数使用 Rest Assured 创建泛型 JSONPath 值提取函数使用 Rest Assured 创建泛型 JSONPath 值提取函数使用 Rest Assured 创建泛型 JSONPath 值提取函数

    本文探讨如何在 Rest Assured 中设计一个泛型工具函数,以实现类型安全的 JSONPath 值提取。针对直接使用 T.class 导致的编译错误,文章提供了通过将 Class 作为参数传入的解决方案,有效规避了 Java 泛型擦除问题,从而实现灵活、可复用的 JSON 数据解析。 泛型 J…

    2026年9月24日 • 用户投稿
    000
  • 怎么用豆包AI分析Python内存使用 AI辅助定位内存泄漏的实用方法

    怎么用豆包AI分析Python内存使用 AI辅助定位内存泄漏的实用方法怎么用豆包AI分析Python内存使用 AI辅助定位内存泄漏的实用方法怎么用豆包AI分析Python内存使用 AI辅助定位内存泄漏的实用方法怎么用豆包AI分析Python内存使用 AI辅助定位内存泄漏的实用方法

    python内存泄漏可通过tracemalloc、objgraph及代码分析定位。1. 使用tracemalloc模块记录内存分配堆栈,生成快照并输出统计结果,交由豆包ai分析可疑内存泄漏点;2. 用objgraph查看常见对象类型及增长趋势,若发现异常增长对象可交由豆包判断是否合理;3. 将疑似泄…

    2026年9月24日 • 用户投稿
    000
  • 如何验证厂商宣传的散热技术是否切实有效?

    如何验证厂商宣传的散热技术是否切实有效?如何验证厂商宣传的散热技术是否切实有效?如何验证厂商宣传的散热技术是否切实有效?如何验证厂商宣传的散热技术是否切实有效?

    要验证散热技术是否有效,需结合产品规格、第三方评测、用户反馈及自行测试。首先查看热管数量与材质、均热板设计、风扇风量与静压等真实参数,警惕模糊宣传;其次参考专业媒体在标准环境下的烤机测试数据,如AIDA64或FurMark负载下的温度与频率表现;再通过电商平台或论坛收集长期使用反馈,关注共性问题如噪…

    2026年9月24日 • 用户投稿
    000
  • sublime如何格式化sql语句 _sublime SQL格式化方法

    sublime如何格式化sql语句 _sublime SQL格式化方法sublime如何格式化sql语句 _sublime SQL格式化方法sublime如何格式化sql语句 _sublime SQL格式化方法sublime如何格式化sql语句 _sublime SQL格式化方法

    使用插件实现Sublime Text格式化SQL。1. 安装Package Control:通过控制台执行代码安装插件管理工具;2. 安装SQLPrettyPrinter:通过命令面板搜索并安装,选中SQL语句后运行“SQL Pretty Print”命令格式化;3. 高级用户可结合Python的s…

    2026年9月24日 • 用户投稿
    100
  • 如何高效管理Debian文件系统

    高效管理debian文件系统可以通过以下几个步骤来实现: 了解文件系统结构: Debian文件系统遵循标准的Linux文件系统层次结构,例如/bin, /etc, /home, /usr, /var等。熟悉这些目录的作用,有助于更好地组织和管理文件。 磁盘空间管理: 使用df -h命令查看磁盘空间使…

    2026年9月24日
    000
  • windows10提示“we couldn’t complete the updates undoing changes”_windows10更新失败修复方法

    windows10提示“we couldn’t complete the updates undoing changes”_windows10更新失败修复方法windows10提示“we couldn’t complete the updates undoing changes”_windows10更新失败修复方法windows10提示“we couldn’t complete the updates undoing changes”_windows10更新失败修复方法windows10提示“we couldn’t complete the updates undoing changes”_windows10更新失败修复方法

    遇到Windows 10更新失败时,可依次使用Windows更新疑难解答、重置更新组件、运行SFC和DISM修复系统文件,或使用Media Creation Tool进行原地升级解决。 如果您在尝试更新 Windows 10 系统时遇到“我们无法完成更新,正在撤消更改”的提示,这通常意味着更新过程中…

    2026年9月24日 • 用户投稿
    200
  • sublime怎么把选中的代码片段发送到新的文件_sublime代码片段分离操作方法

    sublime怎么把选中的代码片段发送到新的文件_sublime代码片段分离操作方法sublime怎么把选中的代码片段发送到新的文件_sublime代码片段分离操作方法sublime怎么把选中的代码片段发送到新的文件_sublime代码片段分离操作方法sublime怎么把选中的代码片段发送到新的文件_sublime代码片段分离操作方法

    Sublime Text无一键发送代码到新文件功能,但可通过复制粘贴或拖拽方式快速实现:选中代码→复制→新建文件→粘贴并保存;或直接拖拽选中内容至标签栏创建新文件。 在 Sublime Text 中,目前没有直接的内置功能可以把选中的代码片段“一键发送”到一个新文件。但你可以通过几个简单的手动步骤快…

    2026年9月24日 • 用户投稿
    100
  • 抖音辅助账号上限怎么解除?抖音辅助账号上限解除最简单方法

    抖音辅助账号上限怎么解除?抖音辅助账号上限解除最简单方法抖音辅助账号上限怎么解除?抖音辅助账号上限解除最简单方法抖音辅助账号上限怎么解除?抖音辅助账号上限解除最简单方法抖音辅助账号上限怎么解除?抖音辅助账号上限解除最简单方法

    在如今火爆的短视频领域,抖音已成为众多内容创作者和商家运营的首选平台。为了实现更高效的推广与内容分发,不少人选择使用辅助账号来配合主账号运营。然而,“抖音辅助账号上限”这一问题常常让用户感到困扰。本文将为你全面解析抖音辅助账号上限怎么解除,并分享最实用、最简单的解决策略,助你轻松突破限制,玩转抖音生…

    2026年9月24日 • 用户投稿
    000
  • ubuntu如何安装vnc客户端

    在ubuntu上安装vnc客户端有多种方法,以下是几种常见的方法: 方法一:使用APT包管理器 更新包列表: sudo apt update 安装VNC客户端: sudo apt install xtightvncviewer 方法二:使用Snap包管理器 如果你更喜欢使用Snap包管理器,可以按照…

    2026年9月24日
    900
  • sublime怎么设置markdown的图片预览_sublime Markdown图片预览设置

    sublime怎么设置markdown的图片预览_sublime Markdown图片预览设置sublime怎么设置markdown的图片预览_sublime Markdown图片预览设置sublime怎么设置markdown的图片预览_sublime Markdown图片预览设置sublime怎么设置markdown的图片预览_sublime Markdown图片预览设置

    Sublime Text需安装插件实现Markdown图片预览:1. 通过Package Control安装MarkdownEditing、MarkdownPreview或OmniMarkupPreviewer;2. 使用MarkdownPreview在浏览器中预览,确保图片路径正确;3. Omni…

    2026年9月24日 • 用户投稿
    100
  • 如何断开mysql数据库连接

    如何断开mysql数据库连接如何断开mysql数据库连接如何断开mysql数据库连接如何断开mysql数据库连接

    为了断开 MySQL 数据库连接,需要按以下步骤进行:创建连接对象获取连接游标关闭游标关闭连接 如何断开 MySQL 数据库连接 要断开 MySQL 数据库连接,可以使用以下步骤: 1. 创建连接对象 首先,使用 connect() 函数创建到数据库的连接对象,该函数需要一个数据库连接参数字符串作为…

    2026年9月24日 • 用户投稿
    200
  • 怎么用豆包AI帮我实现CQRS模式 3步教你用AI分离读写模型

    怎么用豆包AI帮我实现CQRS模式 3步教你用AI分离读写模型怎么用豆包AI帮我实现CQRS模式 3步教你用AI分离读写模型怎么用豆包AI帮我实现CQRS模式 3步教你用AI分离读写模型怎么用豆包AI帮我实现CQRS模式 3步教你用AI分离读写模型

    实现cqrs模式可通过三步借助豆包ai快速完成:一、理清业务场景,将写操作(如用户下单)与读操作(如查看订单列表)分离,可复制代码给豆包ai分析归类;二、让豆包ai生成基础结构代码,输入类似“基于cqrs的订单管理系统,用python flask实现”的指令,获取命令处理器、查询处理器等模块模板;三…

    2026年9月24日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信