Struct tera::Tera[][src]

pub struct Tera { /* fields omitted */ }
Expand description

The main point of interaction in this library.

Implementations

Create a new instance of Tera, containing all the parsed templates found in the dir glob

match Tera::new("templates/**/*") {
    Ok(t) => t,
    Err(e) => {
        println!("Parsing error(s): {}", e);
        ::std::process::exit(1);
    }
}

Create a new instance of Tera, containing all the parsed templates found in the dir glob The difference with Tera::new is that it won’t build the inheritance chains automatically so you are free to modify the templates if you need to. You will NOT get a working Tera instance using Tera::parse, you will need to call tera.build_inheritance_chains() to make it usable

let mut tera = match Tera::parse("templates/**/*") {
    Ok(t) => t,
    Err(e) => {
        println!("Parsing error(s): {}", e);
        ::std::process::exit(1);
    }
};
tera.build_inheritance_chains()?;

We need to know the hierarchy of templates to be able to render multiple extends level This happens at compile-time to avoid checking it every time we want to render a template This also checks for soundness issues in the inheritance chains, such as missing template or circular extends. It also builds the block inheritance chain and detects when super() is called in a place where it can’t possibly work

You generally don’t need to call that yourself, unless you used Tera::parse

We keep track of macro files loaded in each Template so we can know whether one or them is missing and error accordingly before the user tries to render a template.

As with self::build_inheritance_chains, you don’t usually need to call that yourself.

Renders a Tera template given a tera::Context,

To render a template with an empty context, simply pass a new tera::Context object

// Rendering a template with a normal context
let mut context = Context::new();
context.insert("age", 18);
tera.render("hello.html", context);
// Rendering a template with an empty context
tera.render("hello.html", Context::new());

Renders a Tera template given a tera::Context to a std::io::Write,

The only difference from Self::render is that this version doesn’t convert buffer to a String, allowing to render directly to anything that implements std::io::Write.

Any i/o error will be reported in the result.

// Rendering a template to an internal buffer
let mut buffer = Vec::new();
let mut context = Context::new();
context.insert("age", 18);
tera.render_to("hello.html", context, &mut buffer);

Renders a one off template (for example a template coming from a user input) given a Context and an instance of Tera. This allows you to render templates using custom filters or functions.

Any errors will mention the __tera_one_off template: this is the name given to the template by Tera.

let mut context = Context::new();
context.insert("greeting", &"Hello");
let string = tera.render_str("{{ greeting }} World!", &context)?;
assert_eq!(string, "Hello World!");

Renders a one off template (for example a template coming from a user input) given a Context

This creates a separate instance of Tera with no possibilities of adding custom filters or testers, parses the template and render it immediately. Any errors will mention the __tera_one_off template: this is the name given to the template by Tera

let mut context = Context::new();
context.insert("greeting", &"hello");
Tera::one_off("{{ greeting }} world", &context, true);

Returns an iterator over the names of all registered templates in an unspecified order.

Example

use tera::Tera;

let mut tera = Tera::default();
tera.add_raw_template("foo", "{{ hello }}");
tera.add_raw_template("another-one.html", "contents go here");

let names: Vec<_> = tera.get_template_names().collect();
assert_eq!(names.len(), 2);
assert!(names.contains(&"foo"));
assert!(names.contains(&"another-one.html"));

Add a single template to the Tera instance

This will error if the inheritance chain can’t be built, such as adding a child template without the parent one. If you want to add several templates, use Tera::add_templates

tera.add_raw_template("new.html", "Blabla");

Add all the templates given to the Tera instance

This will error if the inheritance chain can’t be built, such as adding a child template without the parent one.

tera.add_raw_templates(vec![
    ("new.html", "blabla"),
    ("new2.html", "hello"),
]);

Add a single template from a path to the Tera instance. The default name for the template is the path given, but this can be renamed with the name parameter

This will error if the inheritance chain can’t be built, such as adding a child template without the parent one. If you want to add several file, use Tera::add_template_files

// Use path as name
tera.add_template_file(path, None);
// Rename
tera.add_template_file(path, Some("index"));

Add several templates from paths to the Tera instance. The default name for the template is the path given, but this can be renamed with the second parameter of the tuple

This will error if the inheritance chain can’t be built, such as adding a child template without the parent one.

tera.add_template_files(vec![
    (path1, None), // this template will have the value of path1 as name
    (path2, Some("hey")), // this template will have `hey` as name
]);

Register a filter with Tera.

If a filter with that name already exists, it will be overwritten

tera.register_filter("upper", string::upper);

Register a tester with Tera.

If a tester with that name already exists, it will be overwritten

tera.register_tester("odd", testers::odd);

Register a function with Tera.

If a function with that name already exists, it will be overwritten

tera.register_function("range", range);

Select which suffix(es) to automatically do HTML escaping on, [".html", ".htm", ".xml"] by default.

Only call this function if you wish to change the defaults.

 // escape only files ending with `.php.html`
 tera.autoescape_on(vec![".php.html"]);
 // disable autoescaping completely
 tera.autoescape_on(vec![]);

Set user-defined function which applied to a rendered content.

 fn escape_c_string(input: &str) -> String { ... }

 // make valid C string literal
 tera.set_escape_fn(escape_c_string);
 tera.add_raw_template("foo", "\"{{ content }}\"").unwrap();
 tera.autoescape_on(vec!["foo"]);
 let mut context = Context::new();
 context.insert("content", &"Hello\n\'world\"!");
 let result = tera.render("foo", &context).unwrap();
 assert_eq!(result, r#""Hello\n\'world\"!""#);

Reset escape function to default tera::escape_html.

Re-parse all templates found in the glob given to Tera Use this when you are watching a directory and want to reload everything, for example when a file is added.

If you are adding templates without using a glob, we can’t know when a template is deleted, which would result in an error if we are trying to reload that file

Use that method when you want to add a given Tera instance templates/filters/testers to your own. If a template/filter/tester with the same name already exists in your instance, it will not be overwritten.

 // add all the templates from FRAMEWORK_TERA
 // except the ones that have an identical name to the ones in `my_tera`
 my_tera.extend(&FRAMEWORK_TERA);

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Returns the “default value” for a type. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

Performs the conversion.

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.