Sheer templates for

templates, sheer, jinja, cfpb
npm install cfgov-sheer-templates@2.1.9


⚠️ THIS REPO IS DEPRECATED (5/18/2018) ⚠️


This is a repository of base templates for pages served by the Sheer engine.

This repo is currently housing templates that bridge the gap between the current WordPress theme (cfpb_nemo) and future sitewide Sheer templates.

The hopeful, eventual end state of this repo is the single source for all HTML, CSS, and JavaScript for sitewide use on

What's in this repo?


Layouts pull together everything needed to display a whole page.


The base template on which all others are built. Includes:

    {% import macros %}
        <!-- Global meta -->
        <!-- Page-specific meta -->
        <!-- Global styles -->
        {% block additional_styles %}
        <!-- Global head scripts -->
        {% block head_scripts %}
        <!-- Analytics -->
        {% block body_top %}
        {% block include_header %}
        {% block content %}
        {% block include_footer %}
        {% block body_bottom %}
        <!-- Global body scripts -->
        {% block body_scripts %}


Includes are template partials and Jinja helpers.

nemo_header.html, nemo_subnav.html, and nemo_footer.html

Included in base.html, these files contain replicas of the current (as of November 2015) header, navigation and footer, adapted to have basic responsiveness.

Styles for these are found in nemo.less and nemo-shim.less.


This file sets up a left-hand navigation sidebar based on the designs modeled by cfgov-refresh.

See below for further instructions.


Stores macros that can be called in templates. Imported into base.html so that it's available everywhere.

How to use these

Coming soon: getting started instructions.

Using sidebar navigation

To activate the sidebar secondary navigation, first create a nav_items variable in a new include file in your project. The recommended naming convention is _vars-<projectname>.html. Each item has three components: the path, an ID for the item, and the link text.

Use this example from the FinEd Resources project to guide you:

{% set nav_items = [
    ('/adult-financial-education/', 'adult-financial-education', 'Adult financial education'),
    ('/youth-financial-education/', 'youth-financial-education', 'Youth financial education'),
    ('/library-resources', 'library-resources', 'Resources for libraries'),
    ('/parents/', 'parents', 'Resources for parents'),
    ('/managing-someone-elses-money/', 'managing-someone-elses-money', 'Guides for managing someone else’s money'),
] -%}

On each page, after extending layout-side-nav.html, set the active_nav_id variable to enable highlighting the current page, and then import the _vars file you just created:

{% set active_nav_id = 'library-resources' -%}
{% import '_vars-libraries.html' as libraries with context %}

You'll also want to grab the latest styles for the navigation component from the cfgov-refresh project

If you'd like to use two-level sidebar navigation, then for each parent nav item that will have children:

  1. Add a fourth element, named <parentitem>.children to the parent item in the nav_items declaration, like so:

    ('/library-resources', 'library-resources', 'Resources for libraries', libraries.children),
  2. Add a line like this, above the nav_items declaration:

    {% set libraries = { 'children': null } if not libraries else libraries %}
  3. Create a _vars-<parentitem>.html file with a children declaration:

    {% set children = [
        ('/library-resources/program-ideas/', 'program-ideas', 'Program ideas'),
        ('/library-resources/librarian-training/', 'librarian-training', 'Librarian training'),
        ('/library-resources/marketing-materials/', 'marketing-materials', 'Marketing materials'),
        ('/library-resources/websites-videos-courses/', 'websites-videos-courses', 'Websites, videos, and courses'),
    ] -%}
  4. Import the new _vars file in the parent and its children, under the import of the main _vars file. Continuing with the Libraries example, the first four lines of our library-resources/index.html file now look like this:

    {% extends 'layout-side-nav.html' %}
    {% set active_nav_id = 'library-resources' %}
    {% import '_vars-libraries.html' as libraries with context %}
    {% import '_vars-resources.html' as vars with context %}

Note: Use of this navigation sidebar requires your project to have the cf-expandables package available.

Getting involved

We welcome your feedback and contributions.

Known issues

  • cfgov-refresh demo banner needs to be made optional

Open source licensing info

  1. TERMS
  3. CFPB Source Code Policy

Credits and references

  1. Jinja2 templating documentation