Ace Templates

In addition to Go templates and Amber templates, Hugo supports the powerful Ace templates.

For template documentation, follow the links from the Ace project.

  • Ace templates must be named with the ace-suffix, e.g. list.ace
  • It’s possible to use both Go templates and Ace templates side-by-side, and include one into the other
  • Full Go template syntax support, including all the useful helper funcs
  • Partials can be included both with the Ace and the Go template syntax:
    • = include partials/foo.html .1
    • {{ partial "foo" . }}

One noticeable difference between Ace and the others is the inheritance support through base and inner templates.

In Hugo the base template will be chosen in the following order:

1. <current-path>/<template-name>-baseof.ace, e.g. list-baseof.ace
2. <current-path>/baseof.ace
3. _default/<template-name>-baseof.ace, e.g. list-baseof.ace.
4. _default/baseof.ace
5. <themedir>/layouts/_default/<template-name>-baseof.ace
6. <themedir>/layouts/_default/baseof.ace

In the above, current-path is where the corresponding inner template lives, list.ace, single.ace, index.ace

.:
index.ace

./blog:
single.ace
baseof.ace

./_default:
baseof.ace  list.ace  single.ace  single-baseof.ace

Some examples for the layout files above:

  • Home page: ./index.ace + ./_default/baseof.ace
  • Single page in the blog section: ./blog/single.ace + ./blog/baseof.ace
  • Single page in another section: ./_default/single.ace + ./_default/single-baseof.ace
  • Taxonomy page in any section: ./_default/list.ace + ./_default/baseof.ace

Note: In most cases one baseof.ace in _default will suffice. Note: An Ace template without a reference to a base section, e.g. = content, will be handled as a standalone template.


  1. Note that the html suffix is needed, even if the filename is suffixed ace. This does not work from inside a theme, see issue 763. [return]