JUAN PABLO MAYORGA MENDIETA
es útil saber que los templates se basan en jinja2
Exploraremos los templates en Django y sus funcionalidades avanzadas que los diferencian del HTML estándar. Aprenderemos cómo los templates nos permiten mostrar contenido dinámico en el navegador, validar variables, recorrer listas y aplicar filtros para modificar valores antes de mostrarlos. También veremos cómo reutilizar contenido común mediante el archivo base HTML.
¿Qué son los templates en Django?
Los templates en Django son archivos HTML que incluyen funcionalidades adicionales para mostrar contenido dinámico. A diferencia del HTML puro, los Django templates permiten:
iffor¿Cómo se muestran variables en un template?
Para mostrar variables, se encierran en dobles llaves {{ }}. Por ejemplo, para mostrar una variable llamada var del contexto, se usaría:
{{ var }}
¿Qué son y cómo se utilizan los filtros en Django?
Los filtros permiten modificar el valor de una variable antes de mostrarla. Se usan con un pipe | seguido del nombre del filtro. Por ejemplo, para mostrar solo el día y mes de una fecha:
{{ fecha_nacimiento|date:"m/d" }}
Los filtros pueden concatenarse. Por ejemplo, convertir el resultado en minúsculas:
{{ fecha_nacimiento|date:"m/d"|lower }}
¿Qué son los tags en Django y cómo se utilizan?
Los tags agregan funcionalidades adicionales al código HTML. Se abren con {% %} y pueden incluir:
if: para validacionesfor: para recorrer listasurl: para mostrar URLs dinámicasAlgunos tags requieren una etiqueta de cierre. Por ejemplo, if y for:
{% if condition %} <!-- contenido --> {% endif %}
¿Qué es el archivo base HTML en Django?
El archivo base.html permite definir contenido común para ser reutilizado en la aplicación. Se crean bloques que pueden extenderse en otros archivos. Por ejemplo:
<!-- base.html --> <!DOCTYPE html> <html> <head> <title>{% block title %}{% endblock %}</title> </head> <body> <div id="content"> {% block content %} {% endblock %} </div> </body> </html>
Para reutilizar este contenido:
<!-- new_template.html --> {% extends "base.html" %} {% block content %} <!-- contenido específico --> {% endblock %}
JUAN PABLO MAYORGA MENDIETA
es útil saber que los templates se basan en jinja2
Mario Alexander Vargas Celis
Juan David Rueda Quiroga
se parece a twig en php
jhon.ochoa
También se parece a JSP de java
Jesús Patricio Pereira Matus
algo que falto decir es que django usa el template engine de jinja2 que es un motor de templates que mezcla logica en los html, en base a esto tome la decision de usar django solo para backend porque la sintaxis de jinja2 es muy verbosa en cuanto a lo que me gusta y siento que es mejor usar react o otro framework frontend para esto
Luis Martinez
ProfesorAunque es un template engine parecido al de Jinja no debemos confundirlo, Django templates es el nombre que le dieron al template engine que tiene ciertas variaciones con respecto a jinja
Sergio Andres Rios Gomez
que buena explicación ;)
Frandy De La Cruz
No se si fue con la intencion, pero no mostró como usarlo. Pero, tambien nos enseno a buscar documentacion cuando explota todo xD Aqui logre ver que el base iba en la carpeta templates, fuera del app, y tambien a usar los blocks xD
Michael Aguillón
Muy útil el base html ya que lo podemos reutilizar en las templates que queramos y así evitar la redundancia de código.
Las plantillas en Django son una parte esencial del framework, que permiten separar la lógica del servidor (backend) de la presentación (frontend). El sistema de plantillas de Django utiliza archivos HTML con marcadores especiales que permiten insertar datos dinámicos y lógica básica.
Aquí tienes una explicación de cómo funcionan las plantillas en Django y cómo utilizarlas:
### 1. **Creación de Plantillas**
Una plantilla es básicamente un archivo HTML que puede contener etiquetas de Django para renderizar contenido dinámico.
#### Ejemplo básico de plantilla (car\_list.html):
\<!DOCTYPE html> \<html> \<head>   \<title>Listado de carros\</title> \</head> \<body>   \<h2>Listado de carros\</h2>   \<ul>   {% for car in cars %}   \<li>{{ car.name }} - {{ car.brand }}\</li>   {% empty %}   \<li>No hay carros disponibles.\</li>   {% endfor %}   \</ul> \</body> \</html>
### 2. **Directorio de Plantillas**
Django busca las plantillas en una carpeta llamada templates dentro de cada aplicación o en una carpeta global especificada en tu proyecto.
#### Estructura típica de carpetas:
my\_first\_app/   ├── templates/   └── my\_first\_app/   └── car\_list.html
### 3. **Configuración de Plantillas en settings.py**
Asegúrate de que el ajuste TEMPLATES en tu archivo settings.py esté configurado correctamente. Si usas plantillas dentro de las aplicaciones, deberías tener algo como esto:
TEMPLATES = \[   {   'BACKEND': 'django.template.backends.django.DjangoTemplates',   'DIRS': \[], # Aquí puedes agregar directorios de plantillas globales si los tienes   'APP\_DIRS': True, # Activa la búsqueda de plantillas en las aplicaciones   'OPTIONS': {   'context\_processors': \[   'django.template.context\_processors.debug',   'django.template.context\_processors.request',   'django.contrib.auth.context\_processors.auth',   'django.contrib.messages.context\_processors.messages',   ],   },   }, ]
### 4. **Renderizar Plantillas en una Vista**
Para utilizar una plantilla, debes renderizarla en tu vista usando la función render(). Esta función toma el request, el nombre de la plantilla y un contexto con los datos que quieres pasar a la plantilla.
#### Ejemplo de vista:
from django.shortcuts import render from .models import Car def car\_list(request):   cars = Car.objects.all() # Obtén todos los carros   return render(request, 'my\_first\_app/car\_list.html', {'cars': cars})
### 5. **Sintaxis de Plantillas**
- **Variables**: Para mostrar datos dinámicos en una plantilla, utiliza las dobles llaves {{ }}.
Ejemplo:
```html
<p>Nombre del carro: {{ car.name }}</p>
```
- **Etiquetas**: Las etiquetas de plantilla se usan para control de flujo, como bucles, condiciones, etc. Se colocan dentro de {% %}.
Ejemplo de un bucle:
```html
{% for car in cars %}
<p>{{ car.name }} - {{ car.brand }}</p>
{% endfor %}
```
- **Filtros**: Los filtros permiten modificar el valor de una variable en la plantilla. Se aplican con el símbolo |.
Ejemplo:
```html
<p>{{ car.name|upper }}</p> <!-- Convierte el nombre del carro a mayúsculas -->
```
### 6. **Herencia de Plantillas**
Django permite la herencia de plantillas, lo que significa que puedes tener una plantilla base que otras plantillas extienden.
#### Plantilla base (base.html):
\<!DOCTYPE html> \<html lang="es"> \<head>   \<meta charset="UTF-8">   \<title>{% block title %}Mi sitio{% endblock %}\</title> \</head> \<body>   \<header>   \<h2>Mi aplicación de carros\</h2>   \</header>   \<div>   {% block content %}   \<!-- El contenido específico de cada página irá aquí -->   {% endblock %}   \</div>   \<footer>   \<p>Derechos reservados © 2024\</p>   \</footer> \</body> \</html>
#### Plantilla que hereda de base.html (car\_list.html):
{% extends "my\_first\_app/base.html" %} {% block title %}Listado de carros{% endblock %} {% block content %}   \<h3>Listado de carros\</h3>   \<ul>   {% for car in cars %}   \<li>{{ car.name }} - {{ car.brand }}\</li>   {% empty %}   \<li>No hay carros disponibles.\</li>   {% endfor %}   \</ul> {% endblock %}
### 7. **Bloques de Plantilla**
Los bloques, como block title y block content, son marcadores en la plantilla base que otras plantillas pueden sobrescribir. Esto facilita la creación de estructuras de página comunes.
### 8. **Contexto en las Plantillas**
El contexto en Django es el conjunto de variables que pasas desde la vista a la plantilla. Estas variables son accesibles mediante las dobles llaves {{ variable }}.
### Resumen:
- **Plantillas**: Archivos HTML que contienen variables y lógica básica para generar contenido dinámico.
- **Variables y etiquetas**: Se utilizan para insertar datos dinámicos o lógica de control.
- **Herencia de plantillas**: Permite definir una estructura base y extenderla en diferentes páginas.
- **Renderización**: Usa la función render() en tus vistas para renderizar una plantilla con los datos del contexto.
Si necesitas más detalles o ejemplos, ¡déjame saber!