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. Block directives are line-based: start with `@if`, `@for`, or `@else` on their own line, then close the block with `@end`, `@endif`, or `@endfor`. HTML templates also support brace-delimited control blocks, so `@if cond { ... }`, `@else { ... }`, and `@for item in items { ... }` can be closed with `}` instead. Inline one-line bodies like `@if cond { shown }` are supported too. Other directives only have `''` (string) parameters. For example: ```html @if bool_val This is shown if bool_val is true @end ``` ... renders as: ```html This is shown if bool_val is true ``` ... which is less readable. ## if The if directive consists of the `@if` tag, the condition (using the same syntax as in V), and a block of template content. Close the block with `@end` or `@endif`. In HTML templates, you can also use a brace-delimited block and close it with `}`. ``` @if ... @end ``` ### Example ```html @if bool_val This is shown if bool_val is true @end ``` ```html @if bool_val { This is shown if bool_val is true } ``` You can also use `@else`: ```html @if bool_val This is shown if bool_val is true @else This is shown if bool_val is false @endif ``` The first example would result 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 template block, where you can write text, rendered for each iteration of the loop: ``` @for ... @end ``` In HTML templates, you can also use `@for { ... }` and close it with `}`. ### Example for @for ```html @for i, val in my_vals ${i} - ${val} @end ``` The first example would result 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} @end ``` ## 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 template file being called. ### 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}`. # Escaping The `@` symbol starts a template directive. If you need to use `@` as a regular character within a template, escape it by using a double `@` like this: `@@`.