2.6 KiB
Templates are reusable pieces of markdown content, usually with placeholders that are replaced once instantiated.
Templates are used in a few different contexts:
- To render Live Queries
- To render Live Templates
- To be included using Slash Templates
- Some legacy use cases described in 🔌 Template
Creating templates
Templates are defined as any other page. It’s convenient, although not required, to use a template/ prefix when naming templates. It is also recommended to tag templates with a #template tag. Note that this tag will be removed when the template is instantiated.
Tagging a page with a #template tag (either in the Frontmatter or using a Tags at the very beginning of the page content) does two things:
- It excludes the page from being indexed for Objects, that is: any tasks, items, paragraphs etc. will not appear in your space’s object database. Which is usually what you want.
- It allows you to register your templates to be used as Slash Templates.
Templates consist of markdown, but can also include Handlebars syntax, such as {{today}}, and {{#each .}}.
In addition the special |^| marker can be used to specify the desired cursor position after the template is included (relevant mostly to Slash Templates).
Template helpers
There are a number of built-in handlebars helpers you can use:
{{today}}: Today’s date in the usual YYYY-MM-DD format{{tomorrow}}: Tomorrow’s date in the usual YYY-MM-DD format{{yesterday}}: Yesterday’s date in the usual YYY-MM-DD format{{lastWeek}}: Current date - 7 days{{nextWeek}}: Current date + 7 days{{escapeRegexp "hello/there"}}to escape a regexp, useful when injecting e.g. a page name into a query — thinkname =~ /{{escapeRegexp @page.name}}/*{{replaceRegexp string regexp replacement}}: replace a regular expression in a string, example use:{{replaceRegexp name "#[^#\d\s\[\]]+\w+" ""}}to remove hashtags from a task name{{json @page}}translate any (object) value to JSON, mostly useful for debugging{{substring "my string" 0 3}}performs a substring operation on the first argument, which in this example would result inmy{{prefixLines "my string\nanother" " "}}prefixes each line (except the first) with the given prefix.{{niceDate @page.lastModified}}translates any timestamp into a “nice” format (e.g.2023-06-20).- The
@pagevariable contains all page meta data (name,lastModified,contentType, as well as any custom Frontmatter attributes). You can address it like so:{{@page.name}}