Embed GraphViz ‘dot language’ graphs into your documentation, and hot-link the nodes to any HTTP resource.
The sphinx.ext.graphviz extension allows you to directly embed GraphViz ‘dot language’ graphs into your document files. They are then rendered to PNG or SVG images, which get added to your generated HTML documentation. Using SVG allows you to hot-link your nodes to any HTTP resource.
Before use, you have to activate the extension with just a few changes to your docs/conf.py
<span>extensions</span> <span>=</span> <span>[</span><span># … </span> <span>'sphinx.ext.graphviz'</span><span>,</span><span>]</span><span># … </span><span># -- GraphViz configuration ---------------------------------- </span><span>graphviz_output_format</span> <span>=</span> <span>'svg'</span><span>extensions</span> <span>=</span> <span>[</span> <span># … </span> <span>'sphinx.ext.graphviz'</span><span>,</span> <span>]</span> <span># … </span> <span># -- GraphViz configuration ---------------------------------- </span><span>graphviz_output_format</span> <span>=</span> <span>'svg'</span>extensions = [ # … 'sphinx.ext.graphviz', ] # … # -- GraphViz configuration ---------------------------------- graphviz_output_format = 'svg'
This is an example for what you can then add to your documentation:
As long as the nodes have a href
attribute, the SVG rendering contains them and thus node labels become clickable hyperlinks.
And here’s the related markup that needs to be added to one of your .rst
files:
<span>..</span><span> </span><span>graphviz::</span><span> </span><span>:name:</span><span> </span><span>sphinx.ext.graphviz</span><span> </span><span>:caption:</span><span> </span><span>Sphinx</span><span> </span><span>and</span><span> </span><span>GraphViz</span><span> </span><span>Data</span><span> </span><span>Flow</span><span> </span><span>:alt:</span><span> </span><span>How</span><span> </span><span>Sphinx</span><span> </span><span>and</span><span> </span><span>GraphViz</span><span> </span><span>Render</span><span> </span><span>the</span><span> </span><span>Final</span><span> </span><span>Document</span><span> </span><span>:align:</span><span> </span><span>center</span><span> </span><span>digraph</span><span> </span><span>"sphinx-ext-graphviz"</span><span> </span><span>{</span><span> </span><span>size=</span><span>"6,4"</span><span>;</span><span> </span><span>rankdir=</span><span>"LR"</span><span>;</span><span> </span><span>graph</span><span> </span><span>[</span><span>fontname=</span><span>"Verdana"</span><span>,</span><span> </span><span>fontsize=</span><span>"12"</span><span>]</span><span>;</span><span> </span><span>node</span><span> </span><span>[</span><span>fontname=</span><span>"Verdana"</span><span>,</span><span> </span><span>fontsize=</span><span>"12"</span><span>]</span><span>;</span><span> </span><span>edge</span><span> </span><span>[</span><span>fontname=</span><span>"Sans"</span><span>,</span><span> </span><span>fontsize=</span><span>"9"</span><span>]</span><span>;</span><span> </span><span>sphinx</span><span> </span><span>[</span><span>label=</span><span>"Sphinx"</span><span>,</span><span> </span><span>shape=</span><span>"component"</span><span>,</span><span> </span><span>href=</span><span>"https://www.sphinx-doc.org/"</span><span>,</span><span> </span><span>target=</span><span>"_blank"</span><span>]</span><span>;</span><span> </span><span>dot</span><span> </span><span>[</span><span>label=</span><span>"GraphViz"</span><span>,</span><span> </span><span>shape=</span><span>"component"</span><span>,</span><span> </span><span>href=</span><span>"https://www.graphviz.org/"</span><span>,</span><span> </span><span>target=</span><span>"_blank"</span><span>]</span><span>;</span><span> </span><span>docs</span><span> </span><span>[</span><span>label=</span><span>"Docs (.rst)"</span><span>,</span><span> </span><span>shape=</span><span>"folder"</span><span>,</span><span> </span><span>fillcolor=green</span><span>,</span><span> </span><span>style=filled</span><span>]</span><span>;</span><span> </span><span>svg_file</span><span> </span><span>[</span><span>label=</span><span>"SVG Image"</span><span>,</span><span> </span><span>shape=</span><span>"note"</span><span>,</span><span> </span><span>fontcolor=white</span><span>,</span><span> </span><span>fillcolor=</span><span>"#3333ff"</span><span>,</span><span> </span><span>style=filled</span><span>]</span><span>;</span><span> </span><span>html_files</span><span> </span><span>[</span><span>label=</span><span>"HTML Files"</span><span>,</span><span> </span><span>shape=</span><span>"folder"</span><span>,</span><span> </span><span>fillcolor=yellow</span><span>,</span><span> </span><span>style=filled</span><span>]</span><span>;</span><span> </span><span>docs</span><span> </span><span>-></span><span> </span><span>sphinx</span><span> </span><span>[</span><span>label=</span><span>" parse "</span><span>]</span><span>;</span><span> </span><span>sphinx</span><span> </span><span>-></span><span> </span><span>dot</span><span> </span><span>[</span><span>label=</span><span>" call "</span><span>,</span><span> </span><span>style=dashed</span><span>,</span><span> </span><span>arrowhead=none</span><span>]</span><span>;</span><span> </span><span>dot</span><span> </span><span>-></span><span> </span><span>svg_file</span><span> </span><span>[</span><span>label=</span><span>" draw "</span><span>]</span><span>;</span><span> </span><span>sphinx</span><span> </span><span>-></span><span> </span><span>html_files</span><span> </span><span>[</span><span>label=</span><span>" render "</span><span>]</span><span>;</span><span> </span><span>svg_file</span><span> </span><span>-></span><span> </span><span>html_files</span><span> </span><span>[</span><span>style=dashed</span><span>]</span><span>;</span><span> </span><span>}</span><span> </span><span>..</span><span> </span><span>graphviz::</span><span> </span><span>:name:</span><span> </span><span>sphinx.ext.graphviz</span><span> </span><span>:caption:</span><span> </span><span>Sphinx</span><span> </span><span>and</span><span> </span><span>GraphViz</span><span> </span><span>Data</span><span> </span><span>Flow</span><span> </span><span>:alt:</span><span> </span><span>How</span><span> </span><span>Sphinx</span><span> </span><span>and</span><span> </span><span>GraphViz</span><span> </span><span>Render</span><span> </span><span>the</span><span> </span><span>Final</span><span> </span><span>Document</span><span> </span><span>:align:</span><span> </span><span>center</span><span> </span><span>digraph</span><span> </span><span>"sphinx-ext-graphviz"</span><span> </span><span>{</span><span> </span><span>size=</span><span>"6,4"</span><span>;</span><span> </span><span>rankdir=</span><span>"LR"</span><span>;</span><span> </span><span>graph</span><span> </span><span>[</span><span>fontname=</span><span>"Verdana"</span><span>,</span><span> </span><span>fontsize=</span><span>"12"</span><span>]</span><span>;</span><span> </span><span>node</span><span> </span><span>[</span><span>fontname=</span><span>"Verdana"</span><span>,</span><span> </span><span>fontsize=</span><span>"12"</span><span>]</span><span>;</span><span> </span><span>edge</span><span> </span><span>[</span><span>fontname=</span><span>"Sans"</span><span>,</span><span> </span><span>fontsize=</span><span>"9"</span><span>]</span><span>;</span><span> </span><span>sphinx</span><span> </span><span>[</span><span>label=</span><span>"Sphinx"</span><span>,</span><span> </span><span>shape=</span><span>"component"</span><span>,</span><span> </span><span>href=</span><span>"https://www.sphinx-doc.org/"</span><span>,</span><span> </span><span>target=</span><span>"_blank"</span><span>]</span><span>;</span><span> </span><span>dot</span><span> </span><span>[</span><span>label=</span><span>"GraphViz"</span><span>,</span><span> </span><span>shape=</span><span>"component"</span><span>,</span><span> </span><span>href=</span><span>"https://www.graphviz.org/"</span><span>,</span><span> </span><span>target=</span><span>"_blank"</span><span>]</span><span>;</span><span> </span><span>docs</span><span> </span><span>[</span><span>label=</span><span>"Docs (.rst)"</span><span>,</span><span> </span><span>shape=</span><span>"folder"</span><span>,</span><span> </span><span>fillcolor=green</span><span>,</span><span> </span><span>style=filled</span><span>]</span><span>;</span><span> </span><span>svg_file</span><span> </span><span>[</span><span>label=</span><span>"SVG Image"</span><span>,</span><span> </span><span>shape=</span><span>"note"</span><span>,</span><span> </span><span>fontcolor=white</span><span>,</span><span> </span><span>fillcolor=</span><span>"#3333ff"</span><span>,</span><span> </span><span>style=filled</span><span>]</span><span>;</span><span> </span><span>html_files</span><span> </span><span>[</span><span>label=</span><span>"HTML Files"</span><span>,</span><span> </span><span>shape=</span><span>"folder"</span><span>,</span><span> </span><span>fillcolor=yellow</span><span>,</span><span> </span><span>style=filled</span><span>]</span><span>;</span><span> </span><span>docs</span><span> </span><span>-></span><span> </span><span>sphinx</span><span> </span><span>[</span><span>label=</span><span>" parse "</span><span>]</span><span>;</span><span> </span><span>sphinx</span><span> </span><span>-></span><span> </span><span>dot</span><span> </span><span>[</span><span>label=</span><span>" call "</span><span>,</span><span> </span><span>style=dashed</span><span>,</span><span> </span><span>arrowhead=none</span><span>]</span><span>;</span><span> </span><span>dot</span><span> </span><span>-></span><span> </span><span>svg_file</span><span> </span><span>[</span><span>label=</span><span>" draw "</span><span>]</span><span>;</span><span> </span><span>sphinx</span><span> </span><span>-></span><span> </span><span>html_files</span><span> </span><span>[</span><span>label=</span><span>" render "</span><span>]</span><span>;</span><span> </span><span>svg_file</span><span> </span><span>-></span><span> </span><span>html_files</span><span> </span><span>[</span><span>style=dashed</span><span>]</span><span>;</span><span> </span><span>}</span><span> </span>.. graphviz:: :name: sphinx.ext.graphviz :caption: Sphinx and GraphViz Data Flow :alt: How Sphinx and GraphViz Render the Final Document :align: center digraph "sphinx-ext-graphviz" { size="6,4"; rankdir="LR"; graph [fontname="Verdana", fontsize="12"]; node [fontname="Verdana", fontsize="12"]; edge [fontname="Sans", fontsize="9"]; sphinx [label="Sphinx", shape="component", href="https://www.sphinx-doc.org/", target="_blank"]; dot [label="GraphViz", shape="component", href="https://www.graphviz.org/", target="_blank"]; docs [label="Docs (.rst)", shape="folder", fillcolor=green, style=filled]; svg_file [label="SVG Image", shape="note", fontcolor=white, fillcolor="#3333ff", style=filled]; html_files [label="HTML Files", shape="folder", fillcolor=yellow, style=filled]; docs -> sphinx [label=" parse "]; sphinx -> dot [label=" call ", style=dashed, arrowhead=none]; dot -> svg_file [label=" draw "]; sphinx -> html_files [label=" render "]; svg_file -> html_files [style=dashed]; }
For all this to work, you need the GraphViz suite of tools installed on the machine that renders the documentation.
暂无评论内容