.. post:: Dec 28, 2018 :tags: sphinx :category: 文档
The local toc tree in the side bar:
The Ablog features in the side bar:
changes in conf.py
html_theme = 'sphinx_rtd_theme'
# add localtoc.html
html_sidebars = {
'**': [ 'localtoc.html', ...
]
}
# custom.css
html_context = {
'css_files': ['_static/custom.css'],
}
in the _static
directory create custom.css
.wy-menu-vertical h3 {
margin-bottom: 0px;
}
.wy-menu-vertical h2 {
margin-top: 10px;
margin-bottom: 10px;
padding: 0 0.4em;
}
.wy-menu-vertical h3 a {
padding: 0.4em 0.5em !important;
}
.ablog a {
display: inline-block !important;
padding-left: 0.4em;
}
.ablog li {
padding: 0 0.5em;
}
enter into site-packages
directory of your project environment, locate the ablog
directory, open the postcard.html
and make the following change:
...
<ul class="ablog"> {# change here #}
{% include "postcard2.html" %}
...
enter into site-packages
directory of your project environment, locate the sphinx_rtd_theme
directory, and open the layout.html
, change the file according to following code:
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
{% block menu %}
{#
The singlehtml builder doesn't handle this toctree call when the
toctree is empty. Skip building this for now.
#}
{% if 'singlehtml' not in builder %}
{% set global_toc = toctree(maxdepth=theme_navigation_depth|int,
collapse=theme_collapse_navigation|tobool,
includehidden=theme_includehidden|tobool,
titles_only=theme_titles_only|tobool) %}
{% endif %}
{% if global_toc %}
{{ global_toc }}
{% else %}
<!-- Local TOC -->
<!-- <div class="local-toc">{{ toc }}</div> --> {# comment out to avoid double entries of toc #}
{% endif %}
{% endblock %}
{% include 'localtoc.html' %} {# added #}
{% include 'postcard.html' %} {# added #}
{% include "categories.html" %} {# added #}
{% include "tagcloud.html" %} {# added #}
{% include 'recentposts.html' %} {# added #}
</div>
open site-packages/sphinx/builders/html.py
, locate the line with # local TOC and global TOC tree
, change according the following code:
# local TOC and global TOC tree, with local toctree
self_toc = TocTree(self.env).get_toc_for(docname, self)
toc = self.render_partial(self_toc)['fragment']
self._toctree_add_classes(self_toc, docname, 2)
local_toctree = self.render_partial(self_toc)['fragment']
return dict(
parents = parents,
prev = prev,
next = next,
title = title,
meta = meta,
body = body,
metatags = metatags,
rellinks = rellinks,
sourcename = sourcename,
toc = toc,
local_toctree = local_toctree, # added
# only display a TOC if there's more than one item to show
display_toc = (self.env.toc_num_entries[docname] > 1),
page_source_suffix = source_suffix,
)
# adding the logic of generating local toctree
def _toctree_add_classes(self, node, docname, depth):
# type: (nodes.Node, int) -> None
"""Add 'toctree-l%d' and 'current' classes to the toctree."""
for subnode in node.children:
if isinstance(subnode, (addnodes.compact_paragraph,
nodes.list_item)):
# for <p> and <li>, indicate the depth level and recurse
subnode['classes'].append('toctree-l%d' % (depth - 1))
self._toctree_add_classes(subnode, docname, depth)
elif isinstance(subnode, nodes.bullet_list):
# for <ul>, just recurse
self._toctree_add_classes(subnode, docname, depth + 1)
elif isinstance(subnode, nodes.reference):
# for <a>, identify which entries point to the current
# document and therefore may not be collapsed
if subnode['refuri'] == docname:
if not subnode['anchorname']:
# give the whole branch a 'current' class
# (useful for styling it differently)
branchnode = subnode
while branchnode:
branchnode['classes'].append('current')
branchnode = branchnode.parent
# mark the list_item as "on current page"
if subnode.parent.parent.get('iscurrent'):
# but only if it's not already done
return
while subnode:
subnode['iscurrent'] = True
subnode = subnode.parent
open site-packages/sphinx/themes/basic/localtoc.html
, change according the following code:
{#
basic/localtoc.html
~~~~~~~~~~~~~~~~~~~
Sphinx sidebar template: local table of contents.
:copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
#}
{%- if display_toc %}
<h3><a href="{{ pathto(master_doc) }}">{{ _('Table of Contents') }}</a></h3>
{{ local_toctree }} {# change here #}
{%- endif %}