Customizing Nikola


Posted:

This “blog” is written using Restructured Text and generated by Nikola. Simple customizations to Nikola are done by modifying files in files/assets/. The files in the files directory are moved verbatim into the output.

The CSS file files/assets/css/custom.css is loaded by the default theme, so simple customizations go there.

The files for the theme, set in the conf.py file, are also copied into the assets directory, as documented in the theme reference. Nikola has an interesting theme system, where a theme can have a parent theme. The files from the parent theme are used, unless the current theme defines the same file.

The base.tmpl file is where the html pages are defined, then the other specialized templates fill in the details.

To get information from the specific templates, like the post.tmpl, into the base, we can put a block in base.tmpl, and then set the values in the block in post.tmpl.

In base.tmpl:

<%block name="extra_information"></%block>

In post.tmpl:

<%block name="extra_information">
% if post.meta('use_extra_data'):
   <h2>  We have extra data!! </h2>
   Doing some special stuff here.
% endif
</%block>

The data in post.meta comes from the meta data in the post file:

.. use_extra_data: Yes!

Something that tripped me up, is that the if test in the block above is testing if the string exists, not if it is equal to True.

The main reason I was interested in this was to customize on a post-by-post basis.