English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Sistema de plantillas de Django

 Django puede separar Python y HTML por separado, el código Python/Las variables entran en la vista y en la plantilla HTML. Django conecta estos dos, dependiendo de la función de renderización y el lenguaje de plantillas de Django.

Función de renderización

Esta función tiene tres parámetros -

Solicitud - Inicialización de la solicitudRuta de la plantilla - Esta es la ruta relativa a la variable en el archivo settings.py del proyecto hasta la opción TEMPLATE_DIRS.Diccionario de parámetros - El diccionario contiene todas las variables necesarias en la plantilla. Estas variables pueden crearse o utilizarse a través de locals() mediante todas las variables locales declaradas en la vista.

Lenguaje de plantillas de Django (DTL)

El motor de plantillas de Django proporciona un lenguaje pequeño para definir la capa orientada al usuario de la aplicación.

Mostrar variable

La variable se muestra así: {{variable}}. La plantilla se reemplaza por las variables enviadas por el vista en la función de renderización (render). Vamos a cambiar hello.html para que muestre la fecha de hoy:

hello.html

# Nombre de archivo: example.py
# Derechos de autor: 2020 Por w3codebox
# Autor por: es.oldtoolbag.com
# Fecha: 2020-08-08
<html> 
    <body>
       ¡Hola Mundo!!!<p> Hoy es {{today}}</p>
    </body> 
 </html>

Luego, nuestra vista cambiará a -

# Nombre de archivo: example.py
# Derechos de autor: 2020 Por w3codebox
# Autor por: es.oldtoolbag.com
# Fecha: 2020-08-08
def hello(request):
    today = datetime.datetime.now().date()
    return render(request, "hello.html", {"today": today})

Ahora, obtendremos la siguiente salida al acceder a la URL /myapp/después de hello -

# Nombre de archivo: example.py
# Derechos de autor: 2020 Por w3codebox
# Autor por: es.oldtoolbag.com
# Fecha: 2020-08-08
¡Hola Mundo!!!
 Hoy es Sept. 11, 2015

Como ya habrás notado, si la variable no es una cadena, Django usará el método __str__ para mostrarla; y siguiendo el mismo principio, puedes acceder a las propiedades del objeto, como en Python. Por ejemplo: si queremos mostrar el año de la fecha, la variable aquí es: {{today.year}}.

Filtros

Pueden ayudarte a mostrar variables modificadas. La estructura del filtro se muestra a continuación: {{var|filters}}.

Un ejemplo simple -

{{string|truncatewords:8El filtro cortará la cadena, por lo que solo se verá el80 caracteres.}}

       {{string|lower}} - Convertir caracteres a minúsculas            {{string|escape|linebreaks}} - Escapar contenido de la cadena de caracteres, luego convertir saltos de línea a etiquetas.    

También se puede establecer una variable predeterminada.

etiquetas

Las etiquetas pueden realizar las siguientes operaciones: condición if, bucle for, herencia de plantillas y más.

etiqueta if

Como en Python, puedes usar if, else y elif en los templates -

# Nombre de archivo: example.py
# Derechos de autor: 2020 Por w3codebox
# Autor por: es.oldtoolbag.com
# Fecha: 2020-08-08
<html>
    <body>
       ¡Hola Mundo!!!<p> Hoy es {{today}}</p>
       Somos
       {% if today.day == 1 }%
       el primer día del mes.
       {% elif today == 30 %}
       el último día del mes.
       {% else %}
       No sé.
       {% endif %}
    </body>
 </html>

En este nuevo template, según la fecha del día, el template presentará este valor.

etiqueta for

Como 'if', tenemos la etiqueta 'for', que se utiliza exactamente igual que en Python. Vamos a cambiar la lista de vistas hello que se envían a nuestro template -

# Nombre de archivo: example.py
# Derechos de autor: 2020 Por w3codebox
# Autor por: es.oldtoolbag.com
# Fecha: 2020-08-08
def hello(request):
    today = datetime.datetime.now().date()
    daysOfWeek = ['Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb', 'Dom']
    return render(request, "hello.html", {"today": today, "days_of_week": daysOfWeek})

Esta plantilla se utiliza para mostrar una lista {{ for }} -

# Nombre de archivo: example.py
# Derechos de autor: 2020 Por w3codebox
# Autor por: es.oldtoolbag.com
# Fecha: 2020-08-08
<html>
    <body>
       ¡Hola Mundo!!!<p> Hoy es {{today}}</p>
       Somos
       {% if today.day == 1 }%
       el primer día del mes.
       {% elif today == 30 %}
       el último día del mes.
       {% else %}
       No sé.
       {% endif %}
       <p>
          {% for day in days_of_week %}
          {{day}}
       </p>
 
       {% endfor %}
    </body>
 </html>

Deberíamos obtener el siguiente contenido de salida -

# Nombre de archivo: example.py
# Derechos de autor: 2020 Por w3codebox
# Autor por: es.oldtoolbag.com
# Fecha: 2020-08-08
¡Hola Mundo!!!
 Hoy es Sept. 11, 2015
 Somos I no sé.
 Lun
 Mar
 Mié
 Jue
 Vie
 Sáb
 Dom

Bloques y etiquetas de extensión

El sistema de plantillas es la herencia de plantillas incompleta. Cuando diseñes el significado de la plantilla, la plantilla hija llenará una plantilla principal según sus necesidades, como puede necesitar una CSS especial una pestaña seleccionada en una página.

Vamos a modificar el template hello.html para que herede de main_template.html.

main_template.html

# Nombre de archivo: example.py
# Derechos de autor: 2020 Por w3codebox
# Autor por: es.oldtoolbag.com
# Fecha: 2020-08-08
<html>
    <head> 
       <title>
          {% block title %}Título de la página{% endblock %}
       </title> 
    </head>
 
    <body> 
       {% block content %}
          Contenido del cuerpo
       {% endblock %} 
    </body>
 </html>

hello.html

# Nombre de archivo: example.py
# Derechos de autor: 2020 Por w3codebox
# Autor por: es.oldtoolbag.com
# Fecha: 2020-08-08
{% extends "main_template.html" %}
 {% block title %}Mi página de Hola{% endblock %}
 {% block content %}
 ¡Hola Mundo!!!<p> Hoy es {{today}}</p>
 Somos
 {% if today.day == 1 }%
 el primer día del mes.
 {% elif today == 30 %}
 el último día del mes.
 {% else %}
 No sé.
 {% endif %}
 <p>
    {% for day in days_of_week %}
    {{day}}
 </p>
 {% endfor %}
 {% endblock %}

En el ejemplo anterior, al llamar /myapp/hola, aún obtendremos el mismo resultado que antes, pero ahora nos apoyamos en la extensión y no es necesario reformatear el código-−

En main_template.html definimos el uso de bloques de etiquetas. El bloque de barra de título contendrá el título de la página y el bloque de contenido estará en el contenido principal de la página. Al usar la extensión de herencia en Home.html desde main_template.html, utilizamos los bloques definidos anteriormente (contenido y título).

Etiquetas de comentarios

Las etiquetas de comentarios se utilizan para definir comentarios en plantillas, no son comentarios HTML, por lo que no aparecerán en la página HTML. Puede ser un archivo o solo una línea de comentario de código.