Introduction
An
sssgen project is a directory tree of four kinds of files:
.makofiles: these will be rendered using the Mako templating engine..mako_layoutfiles: these are made available to.makofiles for layout purposes.- Ignored files: files that exist in the tree but won't in the output tree, for example any file beginning with
_. - Any other file is copied to the destination directory.
The interesting work in an
sssgen project is done in
.mako files. For example, the source to to this page is
available at tutorial/index.html.mako.
Every
.mako template gets two variables:
page and tree.
The page variable
Here is the content of
page for this file:
{ 'layout': '/tmp/tmp.wcTMjXadTS/default.html.mako_layout',
'title': 'Introduction to sssgen',
'url': 'index.html'}
If you look at the source for this page, you'll see that the keys
title and layout were taken from the so-called
"front matter" of the file. The front matter is just YAML placed at the beginning of the file,
delimited by ---. Front matter is one of four sources for the
contents of the page variable:
page is defined as inherited YAML + layout YAML + front matter
YAML + intrinsic YAML. Each N+1th source of page keys overrides
the Nth source.
The first source of keys in the
page variable is inherited
YAML. Inherited YAML is the collected of YAML as constructed by walking
down the directory to your file, aggregating _inherit.yaml
files along the way. We don't use inherited YAML in this tutorial but it's
very useful.
The next source of
page keys is the chain of layouts. Each
.mako_layout file may contain front matter, which is merged into
page.
Then comes front matter YAML.
The final source of keys is intrinsic YAML. The
url key is
provided by sssgen itself. It gives you the URL for this file,
relative to the root of the project.
The tree variable
Here is the content of
tree for this file:
{ 'css': { 'default.css': { 'url': 'css/default.css'},
'reset.css': { 'url': 'css/reset.css'}},
'index.html': { 'layout': '/tmp/tmp.wcTMjXadTS/default.html.mako_layout',
'title': 'Introduction to sssgen',
'url': 'index.html'},
'textfiles': { 'spongebob.txt': { 'url': 'textfiles/spongebob.txt'},
'squidward.txt': { 'url': 'textfiles/squidward.txt'}}}
tree reflects the directory tree of the project. The leaves
are the page variable for a given file. tree is
useful, for example, for listing sub-contents. In the following block of
code, we use the tree variable and the intrinsic YAML key
url that we discussed earlier, to list Spongebob characters:
<ul>
Here are my favorite Spongebob Squarepants characters:
% for name_of_file, yaml in tree['textfiles'].items():
<li><a href="${yaml['url']}">${name_of_file}</a></li>
% endfor
</ul>
-
Here are my favorite Spongebob Squarepants characters:
- squidward.txt
- spongebob.txt