El libro de Django 1.0

4.1. Introducción al sistema de plantillas

Una plantilla de Django es una cadena de texto que pretende separar la presentación de un documento de sus datos. Una plantilla define rellenos y diversos bits de lógica básica (esto es, etiquetas de plantillas) que regulan cómo debe ser mostrado el documento. Normalmente, las plantillas son usadas para producir HTML, pero las plantillas de Django son igualmente capaces de generar cualquier formato basado en texto.

Vamos a sumergirnos en una simple plantilla de ejemplo. Esta plantilla describe una página HTML que agradece a una persona por hacer un pedido de la empresa. Piensa en esto como un modelo de carta:

<html>
<head><title>Ordering notice</title></head>

<body>

<p>Dear {{ person_name }},</p>

<p>Thanks for placing an order from {{ company }}. It's scheduled to
ship on {{ ship_date|date:"F j, Y" }}.</p>

<p>Here are the items you've ordered:</p>

<ul>
{% for item in item_list %}
<li>{{ item }}</li>
{% endfor %}
</ul>

{% if ordered_warranty %}
<p>Your warranty information will be included in the packaging.</p>
{% endif %}

<p>Sincerely,<br />{{ company }}</p>

</body>
</html>

Esta plantilla es un HTML básico con algunas variables y etiquetas de plantillas agregadas. Vamos paso a paso a través de ésta:

  • Cualquier texto encerrado por un par de llaves (por ej. {{ person_name }}) es una variable. Esto significa "insertar el valor de la variable a la que se dio ese nombre". ¿Cómo especificamos el valor de las variables?. Vamos a llegar a eso en un momento.
  • Cualquier texto que esté rodeado por llaves y signos de porcentaje (por ej. {% if ordered_warranty %}) es una etiqueta de plantilla. La definición de etiqueta es bastante amplia: una etiqueta sólo le indica al sistema de plantilla "haz algo".
Este ejemplo de plantilla contiene dos etiquetas: la etiqueta
`{% for item in item_list %}` (una etiqueta `for`) y la etiqueta
`{% if ordered_warranty %}` (una etiqueta `if`).
Una etiqueta `for` actúa como un simple constructor de bucle, dejándote
recorrer a través de cada uno de los items de una secuencia. Una etiqueta
`if`, como quizás esperabas, actúa como una cláusula lógica "if". En
este caso en particular, la etiqueta comprueba si el valor de la
variable `ordered_warranty` se evalúa como `True`. Si lo hace, el sistema
de plantillas mostrará todo lo que hay entre `{% if ordered_warranty %}` y
`{% endif %}`. Si no, el sistema de plantillas no mostrará esto. El
sistema de plantillas también admite `{% else %}` y otras varias
cláusulas lógicas.
  • Finalmente, el segundo párrafo de esta plantilla tiene un ejemplo de un filtro, con el cual puedes alterar la exposición de una variable. En este ejemplo, {{ ship_date|date:"F j, Y" }}, estamos pasando la variable ship_date por el filtro date, tomando el filtro date el argumento "F j, Y". El filtro date formatea fechas en el formato dado, especificado por ese argumento. Los filtros se encadenan mediante el uso de un carácter pipe (|), como una referencia a las tuberías de Unix.

Cada plantilla de Django tiene acceso a varias etiquetas y filtros incorporados, algunos de los cuales serán tratados en la sección que sigue. El Apéndice F contiene la lista completa de etiquetas y filtros, y es una buena idea familiarizarse con esta lista, de modo que sepas qué es posible. También es posible crear tus propios filtros y etiquetas, los cuales cubriremos en el Capítulo 10.