Style for Templates

This directory has templates in the Tera templating language, which is very similar to Jinja2 and Django templates, and also to Askama.

We want our rendered output to have as little unnecessary whitespace as possible, so that pages load quickly. To achieve that we use Tera's whitespace control features. By default, whitespace characters are removed around jinja tags ({% %} for example). At the end of most lines, we put an empty comment tag: {# #}. This causes all whitespace between the end of the line and the beginning of the next, including indentation, to be omitted on render. Sometimes we want to preserve a single space. In those cases we put the space at the end of the line, followed by {#+ #}, which is a directive to remove following whitespace but not preceding. We also use the whitespace control characters in most instances of tags with control flow, for example {% if foo %}.

We want our templates to be readable, so we use indentation and newlines liberally. We indent by four spaces after opening an HTML tag or a Jinja tag. In most cases an HTML tag should be followed by a newline, but if the tag has simple contents and fits with its close tag on a single line, the contents don't necessarily need a new line.

Askama templates support quite sophisticated control flow. To keep our templates simple and understandable, we use only a subset: if and for. In particular we avoid assignments in the template logic and Askama macros. This also may make things easier if we switch to a different Jinja-style template system in the future.