DIET Templates

To make writing web pages easier vibe.d supports DIET templates which is a simplified syntax to write HTML pages. DIET is based on Pug/Jade templates.

doctype html
html(lang="en")
  head
    // D code is evaluated
    title #{pageTitle}
    // attributes
    script(type='text/javascript')
      if (foo) bar(1 + 5)
    // ID = body-id
    // class = the-style
    body#body-id.the-style
      h1 DIET template

The syntax is indentation-aware and the closing tags don't have to be inserted.

All DIET templates are compiled and are held in memory for maximum performance. DIET templates allows using D code which is evaluated when rendering the page. Single expressions are enclosed in #{ 1 + 1 } and can be used anywhere in the template. Whole D code lines are prefixed with - on their own line:

- foreach(title; titles)
  h1 #{title}

Complex expressions can be used that way, and even functions may be defined that are used to output final HTML.

DIET templates are compiled using CTFE and have to reside in the views folder in a standard vibe.d project. To actually render a DIET template use the render function on a HTTPServerResponse object:

void foo(HTTPServerResponse res) {
    string pageTitle = "Hello";
    int test = 10;
    res.render!("my-template.dt", pageTitle, test);
}

In a web interface you would use the global render method instead.

All D variables available to a DIET template are passed as template parameters to render.

rdmd playground.d