Template Reference
Every page extends layout.html, either directly or through one of the page layouts below. A page can only fill a block that the template it extends defines.
Blocks in layout.html
page_title: the page's<title>tag. By default it shows the site name, plus the page'stitleif one is set. Override it to write your own.meta_description: empty slot in<head>for a meta description tag.tags: empty slot in<head>for extra meta tags.jsonld: end of<head>, for structured data. Includejs/json-ld.htmlhere.staff_toolbar: yellow bar at the top of the page with an "Edit This Page" button, shown only to staff on slug pages. Override it to replace or remove the bar.pageHeader: inside the page's<header>(masthead) area.pageContent: inside<main>. The main body of the page.contact: in the footer, above the footer bar.captchaScript: end of<body>, after the Bootstrap and htmx scripts. Used for the reCAPTCHA script on form pages.
Base layouts (layout/)
layout/no_contact.html: plain page based onlayout.html. Used by the login, signup, and password pages.
Page layouts (layouts/)
Each one fills pageContent with a page structure and adds its own blocks inside it.
centered-card-form: a centered card, for forms. Addstop_leftandmiddle_article.table-list: a titled list or table page. Addstop_left(defaults to a heading),top_right, andmiddle_article.two-col_article-left_sidebar-right: an article with a sidebar, used by wiki pages. Addsleft_col,middle_article,bottom_box, andright_col.two-col_feed-left_filters-right: a feed with a filter column. Addstop_left(defaults to a heading),top_right,left_col, andright_col.hero-feature-grid: a hero area above a content section. Addstop_centerandmiddle_article.hero-video: a video hero inpageHeader, with content inmiddle_article.
Components
comment-form: a reply/comment form. Renders a Django form's fields, or an example textarea if none is passed.comment-thread: a thread of comments, with edit and delete controls whencan_manageis set.decision-panel: shows a submitted request's fields, then either an approve/deny form or a decision banner.divider: a decorative two-line horizontal divider.image_carousel: a hero image carousel from a list ofslides.recaptcha_script: macro that adds a reCAPTCHA v3 token to a form on submit. Needssite_keyin the page context.tile: a card with an optional image, title, and body.profile: a full profile page (extendslayout/no_contact.html), not a reusable piece.
Sections
empty_state: macro for a centered "nothing here" message, with optional icon, title, and button.feature-grid: a grid of cards built fromtile.left-col-img_right-col-article: an image beside an article. Setflipto swap the sides.search_bar: macro for a search form, with optional clear link and button.
Widgets
dynamic-formset: add and remove rows of a Django formset in the browser.slot-picker: a grid of time-slot buttons, each available or disabled.sort-toggle-table: a sortable table with search and pagination. Goes intable-list'smiddle_article.status-control-panel: a filter sidebar with status tabs, filters, and a sort menu.
Macros
pagination: a page navigation bar, shown only when there's more than one page.
Using a component
Most files are added with {% include "path/file.html" %}. The ones marked "macro" are used with {% load macros %} and then {% use_macro name ... %}. Each file's opening comment shows its exact usage.
Pages Here
No sub-pages yet.
Page Info
Wiki: Docs
Created on Nov 2, 2026 by Marissa Swing
Maintainers
| Editor | Last Activity |
|---|---|
| Marissa Swing creator | Nov 2, 2026 |