+++ title = "Sections and Pages" weight = 20 +++ Templates for pages and sections are very similar. ## Page variables Zola will try to load the `templates/page.html` template, the `page.html` template of the theme if one is used or render the built-in template (a blank page). Whichever template you decide to render, you will get a `page` variable in your template with the following fields: ```ts content: String; title: String?; description: String?; date: String?; slug: String; path: String; draft: Bool; // the path, split on '/' components: Array; permalink: String; summary: String?; taxonomies: HashMap>; extra: HashMap; toc: Array
, // Naive word count, will not work for languages without whitespace word_count: Number; // Based on https://help.medium.com/hc/en-us/articles/214991667-Read-time reading_time: Number; // `earlier` and `later` are only populated if the section variable `sort_by` is set to `date` // and only set when rendering the page itself earlier: Page?; later: Page?; // `heavier` and `lighter` are only populated if the section variable `sort_by` is set to `weight` // and only set when rendering the page itself heavier: Page?; lighter: Page?; // Year/month/day is only set if the page has a date and month/day are 1-indexed year: Number?; month: Number?; day: Number?; // Paths of colocated assets, relative to the content directory assets: Array; // The relative paths of the parent sections until the index onef for use with the `get_section` Tera function // The first item is the index section and the last one is the parent section // This is filled after rendering a page content so it will be empty in shortcodes ancestors: Array; // The relative path from the `content` directory to the markdown file relative_path: String; // The language for the page if there is one. Default to the config `default_language` lang: String; // Information about all the available languages for that content translations: Array; ``` ## Section variables By default, Zola will try to load `templates/index.html` for `content/_index.md` and `templates/section.html` for other `_index.md` files. If there isn't one, it will render the built-in template (a blank page). Whichever template you decide to render, you will get a `section` variable in your template with the following fields: ```ts content: String; title: String?; description: String?; path: String; // the path, split on '/' components: Array; permalink: String; extra: HashMap; // Pages directly in this section, sorted if asked pages: Array; // Direct subsections to this section, sorted by subsections weight // This only contains the path to use in the `get_section` Tera function to get // the actual section object if you need it subsections: Array; toc: Array
, // Unicode word count word_count: Number; // Based on https://help.medium.com/hc/en-us/articles/214991667-Read-time reading_time: Number; // Paths of colocated assets, relative to the content directory assets: Array; // The relative paths of the parent sections until the index onef for use with the `get_section` Tera function // The first item is the index section and the last one is the parent section // This is filled after rendering a page content so it will be empty in shortcodes ancestors: Array; // The relative path from the `content` directory to the markdown file relative_path: String; // The language for the section if there is one. Default to the config `default_language` lang: String; // Information about all the available languages for that content translations: Array; ``` ## Table of contents Both page and section templates have a `toc` variable that corresponds to an array of `Header`. A `Header` has the following fields: ```ts // The hX level level: 1 | 2 | 3 | 4 | 5 | 6; // The generated slug id id: String; // The text of the header title: String; // A link pointing directly to the header, using the inserted anchor permalink: String; // All lower level headers below this header children: Array
; ``` ## Translated content Both pages and sections have a `translations` field that corresponds to an array of `TranslatedContent`. If your site is not using multiple languages, this will always be an empty array. `TranslatedContent` has the following fields: ```ts // The language code for that content, empty if it is the default language lang: String?; // The title of that content if there is one title: String?; // A permalink to that content permalink: String; // The path to the markdown file; useful for retrieving the full page through // the `get_page` function. path: String; ```