V allows for easily using text templates, expanded at compile time to V functions, that efficiently produce text output. This is especially useful for templated HTML views, but the mechanism is general enough to be used for other kinds of text output also. # Template directives Each template directive begins with an `@` sign. Some directives contain a `{}` block, others only have `''` (string) parameters. Newlines on the beginning and end are ignored in `{}` blocks, otherwise this (see [if](#if) for this syntax): ```html @if bool_val { This is shown if bool_val is true } ``` ... would output: ```html This is shown if bool_val is true ``` ... which is less readable. ## if The if directive, consists of three parts, the `@if` tag, the condition (same syntax like in V) and the `{}` block, where you can write html, which will be rendered if the condition is true: ``` @if {} ``` ### Example ```html @if bool_val { This is shown if bool_val is true } ``` One-liner: ```html @if bool_val { This is shown if bool_val is true } ``` The first example would result in: ```html This is shown if bool_val is true ``` ... while the one-liner results in: ```html This is shown if bool_val is true ``` ## for The for directive consists of three parts, the `@for` tag, the condition (same syntax like in V) and the `{}` block, where you can write text, rendered for each iteration of the loop: ``` @for {} ``` ### Example for @for ```html @for i, val in my_vals { $i - $val } ``` One-liner: ```html @for i, val in my_vals { $i - $val } ``` The first example would result in: ```html 0 - "First" 1 - "Second" 2 - "Third" ... ``` ... while the one-liner results in: ```html 0 - "First" 1 - "Second" 2 - "Third" ... ``` You can also write (and all other for condition syntaxes that are allowed in V): ```html @for i = 0; i < 5; i++ { $i } ``` ## include The include directive is for including other html files (which will be processed as well) and consists of two parts, the `@include` tag and a following `''` string. The path parameter is relative to the `/templates` directory in the corresponding project. ### Example for the folder structure of a project using templates: ``` Project root /templates - index.html /headers - base.html ``` `index.html` ```html
@include 'header/base'
``` > Note that there shouldn't be a file suffix, > it is automatically appended and only allows `html` files. ## js The js directive consists of two parts, the `@js` tag and `''` string, where you can insert your src ``` @js '' ``` ### Example for the @js directive: ```html @js 'myscripts.js' ``` # Variables All variables, which are declared before the $tmpl can be used through the `@{my_var}` syntax. It's also possible to use properties of structs here like `@{my_struct.prop}`.