【问题标题】:How can I configure Sphinx to conditionally exclude some pages?如何配置 Sphinx 以有条件地排除某些页面?
【发布时间】:2011-11-29 15:35:44
【问题描述】:

使用 Sphinx 生成文档时,我希望能够生成我的文档的两个版本:一个包含所有内容,一个仅包含一组特定页面。实现这一目标的最佳方法是什么?

我可以编写一个构建脚本来移动文件来实现这一点,但如果有一种方法可以告诉 sphinx 在特定构建期间排除或包含特定文档,那就太好了。

【问题讨论】:

    标签: python documentation python-sphinx


    【解决方案1】:

    sphinx.ext.ifconfig 怎么样?您在 conf.py 文件中设置配置值。由于这是一个常规 Python 文件,因此您可以根据需要使包含标准变得智能和自动。

    【讨论】:

      【解决方案2】:

      也许我的回答来的有点晚,但我设法通过 exclude patterns in the config file 用 Sphinx 做到了这一点。

      我的文档部分供用户使用,部分供管理员使用。
      有些页面的文件名包含单词admin,和你一样,我想构建两个版本:一个包含所有内容(管理员文档),一个排除所有“管理员”页面(用户文档)。

      要排除所有子文件夹中的所有“管理”页面,您必须将此行添加到配置文件conf.py

      exclude_patterns = ['**/*admin*']
      

      这是最简单的部分。

      我的问题是我不知道如何在不使用两个不同配置文件的情况下运行构建两次,一次使用排除模式,一次不使用排除模式。

      我自己没有找到解决方案,所以我asked a question here on SO得到了an answer

      • 配置文件只是一个 Python 文件,可以包含 Python 代码,将在构建时执行。
      • 可以通过命令行传递参数(“tags”),可以在配置文件中查询。

      所以我的配置文件中有这个排除模式:

      exclude_patterns = ['**/*admin*']
      if tags.has('adminmode'):
          exclude_patterns = []
      

      现在我可以在不传递任何内容的情况下运行构建,这将排除“管理员”文件:

      make clean
      make html
      

      ⇒ 这是我的用户文档

      ...我可以设置“adminmode”标签,它不会排除任何东西:
      (Windows 命令行语法)

      set SPHINXOPTS=-t adminmode
      make clean
      make html
      

      ⇒ 这是我的管理文档。


      奖励:

      我可以使用相同的标签来忽略页面上的某些特定内容,Including content based on tags

      例子:

      regular documentation
      =====================
      
      This paragraph and its headline will always be visible.
      
      .. only:: adminmode
      
              secret admin stuff
              ------------------
      
              This paragraph will be visible in the admin docs only.
      
      
      This will (again) always be visible.
      

      【讨论】:

      • 另外,exclude_patterns 功能也可以无条件工作。
      【解决方案3】:

      onlyifconfig 指令可用于在页面内应用条件。

      似乎没有任何简单的方法可以使用条件来完全排除整个页面(.rst 文件)。

      以下(在 index.rst 中)在生成 HTML 输出时排除了 index.html 中目录树中对 doc2.html 的引用:

      .. toctree::
         doc1.rst
      
      .. only:: latex
      
         .. toctree::
            doc2.rst
      

      但这并没有真正起作用。 doc2.html 文件仍会生成,当 doc1.html 为当前主题时,可通过“下一个主题”链接访问。

      【讨论】:

      • 我花了几天的时间才意识到您必须缩进 .. only 下的块才能使其工作。哦,Python。
      猜你喜欢
      • 1970-01-01
      • 2019-08-28
      • 2017-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多