Template library

It is generally up to the site or theme author to define any needed Mako/Jinja templates. In rare cases, however, the templates are general enough that it may be natural to distribute them with wmk itself in the form of a Mako template library located under /lib/.

seo.mc

The template /lib/seo.mc makes it easier to format metadata for use in the <head> section of a base template. It is used in something like the following way:

<%namespace import="seo" file="/lib/seo.mc" />
% if page:
  ${ seo(site, page, url=SELF_URL, title=self.page_title) }
% else:
  ${ seo(site, page=None, url=SELF_URL, title=self.page_title,
         img=self.attr.main_image) }
% endif

This will add common meta tags (including basic OpenGraph and JSON-LD information). By default, it also adds a <title> tag. For further details regarding the functionality, see the template file itself.

atom_xml.mc

The template /lib/atom_xml.mc can be used to facilitate the creation of an Atom feed for the website. Set site.base_url to a valid URL and set site.atom_feed to a true value. Then create a file named atom.xml.mhtml in the template root, containing something like the following:

<%namespace name="atom" file="/lib/atom_xml.mc" />\
${ atom.feed(contentlist=MDCONTENT.sorted_by_date()) }\

There are several optional parameters (with_img, get_img, with_summary, get_summary, pubdate_attr, updated_attr, with_full_text, limit) for tweaking the output.

sitemap_xml.mc

Similarly, /lib/sitemap_xml.mc can be used to create a siteamp.xml file. Set site.enable_sitemap to a true value and ensure that site.base_url is present. Then create a file named sitemap.xml.mhtml in the template root, with the following content:

<%namespace import="sitemap" file="/lib/sitemap_xml.mc" />\
${ sitemap(contentlist=MDCONTENT) }\

Usage in Jinja templates

No Jinja version of these components has been created, but the Mako version can be called from a Jinja2 template using code such as the following:

{% set seo = mako_lookup.get_template("/lib/seo.mc").get_def("seo") %}
{{ seo.render(site, page, url=SELF_URL, title=page.title) |safe }}