Integración de Tera y Creación de Templates en Proyectos Rust
Clase 16 de 21 • Curso de Backend con Rust: Bases de Datos, Controladores y Templates
Contenido del curso
Gestión de modelos en el backend con el ORM Diesel
- 2

Uso de ORM Diesel en Aplicaciones Web para Blogs
02:55 min - 3
Errores Comunes al Instalar y Usar Diesel en Rust
00:31 min - 4

Instalación de Diesel y configuración de base de datos en Rust
05:16 min - 5

Creación de Modelos y Migraciones en Rust con Diesel
14:23 min - 6

Inserción de Datos en Bases de Datos con Diesel
07:55 min - 7

Consultas SQL: Cómo Filtrar y Ordenar Datos Específicos
08:16 min - 8

Edición de Registros en Bases de Datos con Diesel
04:40 min - 9

Eliminación de Registros en Bases de Datos con Diesel
03:01 min
Actix web framework (controlador)
- 10

Configuración de Actix Web Framework en Rust
02:41 min - 11

Configuración de Actix y conexión con bases de datos en Rust
10:42 min - 12

Uso de Match Case en Rust para Control de Flujo
07:46 min - 13

Mostrar datos de la base de datos en navegador con Actix
11:39 min - 14

Creación de API RESTful para Blog con Postman y Rust
19:10 min
Tera templates (vistas)
Despliegue del proyecto
Continúa tu aprendizaje
Es momento de realizar el típico ¡Hola Mundo! Pero esta vez con un motor de renderizado de HTML como Tera.
Renderizado de HTML con Rust
Prepara tu proyecto para el renderizado de un HTML básico con Tera de la siguiente manera.
Paso 1. Instalación y preparación de TERA
Comienza instalando la dependencia de Tera en el Cargo.toml.
[dependencies]
tera = "1.10.0"
Impórtalo en el main.rs y configura el servidor HTTP para que reconozca la instancia de Tera y renderize los templates.
// Importamos TERA
use tera::Tera;
// ...
HttpServer::new(move || {
// Instanciamos TERA y le indicamos en qué directorio buscar los templates
let tera = Tera::new(concat!(env!("CARGO_MANIFEST_DIR"), "/templates/**/*")).unwrap();
App::new()
.service(index)
.service(new_post)
.service(tera_test)
.app_data(web::Data::new(pool.clone()))
.app_data(web::Data::new(tera.clone()))
}).bind(("127.0.0.1", 8080)).unwrap().run().await
Paso 2. Creación de templates
Crea un directorio al cual llamaremos /templates en la raíz de tu proyecto (a la altura de src) con un archivo llamado tera_test.html con un HTML básico en su interior.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Rust | Tera</title>
</head>
<body>
Mi primer template HTML con Rust y Tera
</body>
</html>
Paso 3. Renderización HTML con endpoint
Finalmente, crea el endpoint que renderizará nuestro tera_test.html.
#[get("/tera_test")]
async fn tera_test(template_manager: web::Data<tera::Tera>) -> impl Responder {
// Creamos un contexto para pasarle datos al template
let mut ctx = tera::Context::new();
// Enviamos el template que queremos localizándolo por su nombre
HttpResponse::Ok().content_type("text/html").body(
template_manager.render("tera_test.html", &ctx).unwrap()
)
}
Si todo ha ido bien, simplemente ingresando a 127.0.0.1:8080/tera_test visualizarás el contenido del template.
De esta forma, ya puedes crear toda una página web estática con Rust y Tera. Pero aún queda lo mejor, enviar datos dinámicamente al template.
Contribución creada por: Kevin Fiorentino.