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:
Mostrar variables
Realizar validaciones con if
Recorrer listas con for
¿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 validaciones
for: para recorrer listas
url: para mostrar URLs dinámicas
Algunos 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:
Lo que mencionas del base.html es en realidad un layout. Podemos tener varios layouts, y allí definimos todo aquello que se va a mantener en todas las vistas. Como un nav o un footer.
Asi lo conozco de .net al menos... pense que el concepto era generico
Siii, >Eso mismo tambien pense Yo, ellos son LayOuts. <templates/>
es útil saber que los templates se basan en jinja2
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):
\<!DOCTYPEhtml>\<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.
### 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 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!
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
Aunque 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
que buena explicación ;)
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
Muy útil el base html ya que lo podemos reutilizar en las templates que queramos y así evitar la redundancia de código.