Este documento describe las etiquetas y filtros de plantillas integrados de Django. Se recomienda utilizar la documentación automática , si está disponible, ya que también incluirá documentación para cualquier etiqueta o filtro personalizado instalado.
Controla el comportamiento actual de escape automático. Este etiqueta admite como argumento on o off, y determina si el escape automático está en efecto dentro del bloque. El bloque se cierra con la etiqueta final endautoescape.
Uso de ejemplo:
{% autoescape on %}
{{ body }}
{% endautoescape %}
Cuando el escape automático está en efecto, todos los contenidos derivados de variables tienen el escape HTML aplicado antes de colocar el resultado en la salida (pero después de cualquier filtro se aplique). Esto es equivalente a aplicar manualmente el filtro escape a cada variable.
Las únicas excepciones son las variables ya marcadas como «seguras» para evitar el escape. Las variables podrían estar marcadas como «seguras» por el código que pobló la variable, al aplicar los filtros safe o escape, o porque es el resultado de un filtro anterior que marcó la cadena como «segura».
Dentro del ámbito en el que está deshabilitado el escape automático, la concatenación de filtros, incluido escape, puede causar resultados inesperados (pero documentados) como los siguientes:
{% autoescape off %}
{{ my_list|join:", "|escape }}
{% endautoescape %}
El código anterior producirá la salida unida de my_list sin escapar. Esto es porque la secuencia de filtrado ejecuta primero join en my_list (sin aplicar el escape a cada elemento ya que autoescape está off), marcando el resultado como seguro. Posteriormente, este resultado seguro se alimentará al filtro escape, que no aplica una segunda ronda de escapado.
Para escapar correctamente cada elemento en una secuencia, utilice el filtro escapeseq:
{% autoescape off %}
{{ my_list|escapeseq|join:", " }}
{% endautoescape %}
block¶Define un bloque que puede ser sobrescrito por plantillas hijas. Consulte la sección Herencia de plantilla para obtener más información.
comment¶Ignora todo lo que hay entre {% comment %} y {% endcomment %}. Puede insertarse una nota opcional en la primera etiqueta. Por ejemplo, esto es útil cuando se comentan código para documentar por qué el código estaba deshabilitado.
Uso de ejemplo:
<p>Rendered text with {{ pub_date|date:"c" }}</p>
{% comment "Optional note" %}
<p>Commented out text with {{ create_date|date:"c" }}</p>
{% endcomment %}
Las etiquetas comment no pueden ser anidadas.
csrf_token¶Esta etiqueta se utiliza para la protección CSRF, tal como se describe en la documentación de Cross Site Request Forgeries.
cycle¶Produce uno de sus argumentos cada vez que esta etiqueta es encontrada. El primer argumento se produce en la primera aparición, el segundo argumento en la segunda aparición y así sucesivamente. Una vez agotados todos los argumentos, la etiqueta vuelve al primer argumento y lo produce nuevamente.
Esta etiqueta es particularmente útil en un bucle:
{% for o in some_list %}
<tr class="{% cycle 'row1' 'row2' %}">
...
</tr>
{% endfor %}
La primera iteración produce HTML que se refiere a la clase row1, la segunda a row2 y así sucesivamente para cada iteración del bucle.
Puedes utilizar variables, también. Por ejemplo, si tienes dos variables de plantilla, rowvalue1 y rowvalue2, puedes alternar entre sus valores de esta manera:
{% for o in some_list %}
<tr class="{% cycle rowvalue1 rowvalue2 %}">
...
</tr>
{% endfor %}
Los variables incluidas en el ciclo serán escapadas. Puedes deshabilitar la escape automática con:
{% for o in some_list %}
<tr class="{% autoescape off %}{% cycle rowvalue1 rowvalue2 %}{% endautoescape %}">
...
</tr>
{% endfor %}
Puedes mezclar variables y cadenas de texto:
{% for o in some_list %}
<tr class="{% cycle 'row1' rowvalue2 'row3' %}">
...
</tr>
{% endfor %}
En algunos casos, podrías querer referirte al valor actual del ciclo sin avanzar a la siguiente valor. Para hacer esto, da el nombre {% cycle %} con «como», como se muestra a continuación:
{% cycle 'row1' 'row2' as rowcolors %}
A partir de entonces, puedes insertar el valor actual del ciclo donde desees en tu plantilla haciendo referencia al nombre del ciclo como una variable de contexto. Si deseas mover el ciclo a la siguiente valor independientemente de la original cycle etiqueta, puedes usar otra cycle etiqueta y especificar el nombre de la variable. Por lo tanto, el siguiente plantilla:
<tr>
<td class="{% cycle 'row1' 'row2' as rowcolors %}">...</td>
<td class="{{ rowcolors }}">...</td>
</tr>
<tr>
<td class="{% cycle rowcolors %}">...</td>
<td class="{{ rowcolors }}">...</td>
</tr>
produciría:
<tr>
<td class="row1">...</td>
<td class="row1">...</td>
</tr>
<tr>
<td class="row2">...</td>
<td class="row2">...</td>
</tr>
Puedes utilizar cualquier número de valores en una cycle etiqueta, separados por espacios. Los valores encerrados entre comillas simples (') o dobles (") se tratan como literales de cadena, mientras que los valores sin comillas se tratan como variables de plantilla.
Por defecto, cuando usas la palabra clave as con la etiqueta del ciclo, el uso de {% cycle %} que inicia el ciclo producirá el primer valor en el ciclo. Esto podría ser un problema si deseas usar el valor en una bucle anidada o una plantilla incluida. Si solo quieres declarar el ciclo pero no producir el primer valor, puedes agregar la palabra clave silent como la última palabra en la etiqueta. Por ejemplo:
{% for obj in some_list %}
{% cycle 'row1' 'row2' as rowcolors silent %}
<tr class="{{ rowcolors }}">{% include "subtemplate.html" %}</tr>
{% endfor %}
Esto producirá una lista de elementos <tr> con class alternando entre row1 y row2. La subplantilla tendrá acceso a rowcolors en su contexto y el valor coincidirá con la clase del <tr> que lo encierra. Si se omitiera la palabra clave silent, row1 y row2 se emitirían como texto normal, fuera del elemento <tr>.
Cuando se utiliza la palabra clave silenciosa en una definición de ciclo, el silencio se aplica automáticamente a todos los usos posteriores de esa etiqueta específica. La siguiente plantilla produciría nada, aunque la segunda llamada a {% cycle %} no especifica silent:
{% cycle 'row1' 'row2' as rowcolors silent %}
{% cycle rowcolors %}
Puedes usar la resetcycle etiqueta para hacer que una {% cycle %} etiqueta vuelva a su primer valor cuando se encuentre por primera vez.
debug¶Los textos traducidos son:
extends¶Señala que este template extiende un template padre.
Esta etiqueta se puede utilizar de dos maneras:
{% extends "base.html" %} (con comillas) utiliza el valor literal "base.html" como nombre del template padre a extender.
{% extends variable %} utiliza el valor de variable. Si la variable evalúa a una cadena, Django utilizará esa cadena como nombre del template padre. Si la variable evalúa a un objeto Template, Django utilizará ese objeto como template padre.
Véase Herencia de plantillas para obtener más información.
Normalmente el nombre del template es relativo al directorio raíz del cargador de plantillas. Un argumento de cadena también puede ser un camino relativo que comienza con ./ o ../. Por ejemplo, suponiendo la siguiente estructura de directorios:
dir1/
template.html
base2.html
my/
base3.html
base1.html
En template.html, los siguientes caminos serían válidos:
{% extends "./base2.html" %}
{% extends "../base1.html" %}
{% extends "./my/base3.html" %}
filter¶Aplica uno o más filtros a los contenidos del bloque. Se pueden especificar múltiples filtros con pipes y los filtros pueden tener argumentos, exactamente como en la sintaxis de variables.
Ten en cuenta que el bloque incluye todo el texto entre las filter y endfilter etiquetas.
Uso de ejemplo:
{% filter force_escape|lower %}
This text will be HTML-escaped, and will appear in all lowercase.
{% endfilter %}
Nota
La traducción es:
Salida la primera variable de argumento que no sea «falso» (es decir, exista, no esté vacía, no sea un valor booleano falso y no sea un valor numérico cero). No se produce salida si todas las variables pasadas son «falsas».
Uso de ejemplo:
{% firstof var1 var2 var3 %}
Esta es equivalente a:
{% if var1 %}
{{ var1 }}
{% elif var2 %}
{{ var2 }}
{% elif var3 %}
{{ var3 }}
{% endif %}
Puedes utilizar una cadena literal como valor de fallback en caso de que todas las variables pasadas sean falsas:
{% firstof var1 var2 var3 "fallback value" %}
Esta etiqueta escapa automáticamente los valores de las variables. Puedes deshabilitar la escapada automática con:
{% autoescape off %}
{% firstof var1 var2 var3 "<strong>fallback value</strong>" %}
{% endautoescape %}
Si solo algunas variables deben escaparse, puedes utilizar:
{% firstof var1 var2|safe var3 "<strong>fallback value</strong>"|safe %}
Puedes utilizar la sintaxis `{% firstof var1 var2 var3 as value %}` para almacenar el resultado dentro de una variable.
Loops sobre cada elemento de un array, haciendo el elemento disponible en una variable de contexto. Por ejemplo, para mostrar una lista de atletas proporcionada en athlete_list:
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>
Puedes recorrer una lista en reversa utilizando {% for obj in list reversed %}.
Si necesitas recorrer una lista de listas, puedes desempaquetar los valores en cada sublista en variables individuales. Por ejemplo, si tu contexto contiene una lista de coordenadas (x,y) llamada points, podrías utilizar el siguiente para mostrar la lista de puntos:
{% for x, y in points %}
There is a point at {{ x }},{{ y }}
{% endfor %}
Esto también puede ser útil si necesitas acceder a los elementos de un diccionario. Por ejemplo, si tu contexto contuviera un diccionario data, el siguiente mostraría las claves y valores del diccionario:
{% for key, value in data.items %}
{{ key }}: {{ value }}
{% endfor %}
Ten en cuenta que para el operador de punto, la búsqueda de clave en un diccionario tiene prioridad sobre la búsqueda de método. Por lo tanto, si el diccionario data contiene una clave llamada 'items', data.items devolverá data['items'] en lugar de data.items(). Evita agregar claves que se llaman como métodos de un diccionario si deseas utilizar esos métodos en un template (items, values, keys, etc.). Lee más sobre el orden de búsqueda del operador de punto en la documentación de variables de plantilla.
El bucle for establece una serie de variables disponibles dentro del bucle:
Variable |
Descripción |
|---|---|
|
La iteración actual del bucle (1-indexada) |
|
La iteración actual del bucle (0-índice) |
|
El número de iteraciones desde el final del bucle (1-índice) |
|
El número de iteraciones desde el final del bucle (0-índice) |
|
Verdadero si se está pasando por primera vez el bucle |
|
Verdadero si se está pasando por última vez el bucle |
|
Los textos traducidos son: |
for … vacío¶El tag for puede tomar una cláusula opcional {% empty %} cuyo texto se muestra si la lista dada está vacía o no se ha encontrado:
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% empty %}
<li>Sorry, no athletes in this list.</li>
{% endfor %}
</ul>
Lo anterior es equivalente a – pero más corto, limpio y posiblemente más rápido que – lo siguiente:
<ul>
{% if athlete_list %}
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
{% else %}
<li>Sorry, no athletes in this list.</li>
{% endif %}
</ul>
if¶El tag {% if %} evalúa una variable, y si esa variable es «verdadera» (es decir, existe, no está vacía y no tiene un valor booleano falso) se muestran los contenidos del bloque:
{% if athlete_list %}
Number of athletes: {{ athlete_list|length }}
{% elif athlete_in_locker_room_list %}
Athletes should be out of the locker room soon!
{% else %}
No athletes.
{% endif %}
En lo anterior, si la lista de atletas athlete_list no está vacía, el número de atletas se mostrará mediante la variable {{ athlete_list|length }}.
Como puedes ver, el tag if puede tomar una o varias cláusulas {% elif %}, así como una cláusula {% else %} que se mostrará si todas las condiciones anteriores fallan. Estas cláusulas son opcionales.
Los tags if pueden utilizar and, or o not para probar varias variables o negar una variable dada:
{% if athlete_list and coach_list %}
Both athletes and coaches are available.
{% endif %}
{% if not athlete_list %}
There are no athletes.
{% endif %}
{% if athlete_list or coach_list %}
There are some athletes or some coaches.
{% endif %}
{% if not athlete_list or coach_list %}
There are no athletes or there are some coaches.
{% endif %}
{% if athlete_list and not coach_list %}
There are some athletes and absolutely no coaches.
{% endif %}
Uso de ambas cláusulas and y or dentro del mismo etiqueta está permitido, con and teniendo una mayor precedencia que or por ejemplo:
{% if athlete_list and coach_list or cheerleader_list %}
será interpretado como:
if (athlete_list and coach_list) or cheerleader_list:
...
Uso de paréntesis reales en la etiqueta if es sintaxis inválida. Si necesitas utilizarlos para indicar precedencia, debes usar etiquetas if anidadas.
ttag:`etiquetas if también pueden utilizar los operadores ==, !=, <, >, <=, >=, in, not in, es, y no es que funcionan de la siguiente manera:
==¶Igualdad. Ejemplo:
{% if somevar == "x" %}
This appears if variable somevar equals the string "x"
{% endif %}
Desigualdad. Ejemplo:
{% if somevar != "x" %}
This appears if variable somevar does not equal the string "x",
or if somevar is not found in the context
{% endif %}
Menos de. Ejemplo:
{% if somevar < 100 %}
This appears if variable somevar is less than 100.
{% endif %}
Mayor que. Ejemplo:
{% if somevar > 0 %}
This appears if variable somevar is greater than 0.
{% endif %}
Menor o igual a. Ejemplo:
{% if somevar <= 100 %}
This appears if variable somevar is less than 100 or equal to 100.
{% endif %}
Mayor o igual a. Ejemplo:
{% if somevar >= 1 %}
This appears if variable somevar is greater than 1 or equal to 1.
{% endif %}
Contenido dentro de. Este operador está soportado por muchos contenedores de Python para comprobar si el valor dado está en el contenedor. A continuación, se muestran algunos ejemplos de cómo x in y será interpretado:
{% if "bc" in "abcdef" %}
This appears since "bc" is a substring of "abcdef"
{% endif %}
{% if "hello" in greetings %}
If greetings is a list or set, one element of which is the string
"hello", this will appear.
{% endif %}
{% if user in users %}
If users is a QuerySet, this will appear if user is an
instance that belongs to the QuerySet.
{% endif %}
No contenido dentro de. Esta es la negación del operador in.
is¶Identidad de objeto. Comprueba si dos valores son el mismo objeto. Ejemplo:
{% if somevar is True %}
This appears if and only if somevar is True.
{% endif %}
{% if somevar is None %}
This appears if somevar is None, or if somevar is not found in the context.
{% endif %}
is not¶Identidad de objeto negada. Comprueba si dos valores no son el mismo objeto. Esta es la negación del operador is. Ejemplo:
{% if somevar is not True %}
This appears if somevar is not True, or if somevar is not found in the
context.
{% endif %}
{% if somevar is not None %}
This appears if and only if somevar is not None.
{% endif %}
También puedes utilizar filtros en la expresión if. Por ejemplo:
{% if messages|length >= 100 %}
You have lots of messages today!
{% endif %}
Todos los de arriba se pueden combinar para formar expresiones complejas. En tales expresiones, puede ser importante saber cómo se agrupan los operadores cuando la expresión se evalúa - es decir, las reglas de precedencia. El orden de precedencia de los operadores, desde el más bajo hasta el más alto, es el siguiente:
o
y
no
in
==, !=, <, >, <=, >=
(Se sigue exactamente Python). Por ejemplo, el siguiente complejo if etiqueta:
{% if a == b or c == d and e %}
…se interpretará como:
(a == b) or ((c == d) and e)
Si necesitas un diferente orden de precedencia, deberás utilizar etiquetas if anidadas. A veces eso es mejor para la claridad en cualquier caso, por el bien de aquellos que no conocen las reglas de precedencia.
Los operadores de comparación no pueden ser “encadenados” como en Python o en notación matemática. Por ejemplo, en lugar de utilizar:
{% if a > b > c %} (WRONG)
deberías usar:
{% if a > b and b > c %}
ifchanged¶Comprueba si un valor ha cambiado desde la última iteración de un bucle.
La etiqueta bloque {% ifchanged %} se utiliza dentro de un bucle. Tiene dos posibles usos.
Verifica sus propios contenidos renderizados frente a su estado anterior y solo muestra el contenido si ha cambiado. Por ejemplo, esto muestra una lista de días, solo mostrando el mes si cambia:
<h1>Archive for {{ year }}</h1>
{% for date in days %}
{% ifchanged %}<h3>{{ date|date:"F" }}</h3>{% endifchanged %}
<a href="{{ date|date:"M/d"|lower }}/">{{ date|date:"j" }}</a>
{% endfor %}
Si se le dan uno o más variables, comprueba si alguna variable ha cambiado. Por ejemplo, el siguiente muestra la fecha cada vez que cambia, mientras que muestra la hora si han cambiado tanto la hora como la fecha:
{% for date in days %}
{% ifchanged date.date %} {{ date.date }} {% endifchanged %}
{% ifchanged date.hour date.date %}
{{ date.hour }}
{% endifchanged %}
{% endfor %}
La etiqueta ifchanged también puede tener una cláusula {% else %} opcional que se mostrará si el valor no ha cambiado:
{% for match in matches %}
<div style="background-color:
{% ifchanged match.ballot_id %}
{% cycle "red" "blue" %}
{% else %}
gray
{% endifchanged %}
">{{ match }}</div>
{% endfor %}
incluye¶Carga un template y lo renderiza con el contexto actual. Esta es una forma de «incluir» otros templates dentro de un template.
El nombre del template puede ser una variable o una cadena dura (comillas) codificada, en comillas simples o dobles.
Este ejemplo incluye el contenido del template "foo/bar.html":
{% include "foo/bar.html" %}
Normalmente, el nombre del template es relativo a la carpeta raíz del cargador de plantillas. Un argumento de cadena también puede ser un camino relativo que comienza con ./ o ../ como se describe en la etiqueta extends.
Este ejemplo incluye el contenido del template cuyo nombre está contenido en la variable template_name:
{% include template_name %}
La variable también puede ser cualquier objeto con un método render() que acepte un contexto. Esto te permite referenciar una plantilla compilada en tu contexto.
Además, la variable puede ser una secuencia de nombres de plantillas, en cuyo caso se utilizará la primera que pueda cargarse, según select_template().
Un template incluido se renderiza dentro del contexto del template que lo incluye. Este ejemplo produce el resultado "Hello, John!":
Los textos traducidos manteniendo todas las etiquetas intactas son:
Plantilla:
{% include "name_snippet.html" %}
El template name_snippet.html:
{{ greeting }}, {{ person|default:"friend" }}!
Puedes pasar contexto adicional al template utilizando argumentos de palabra clave:
{% include "name_snippet.html" with person="Jane" greeting="Hello" %}
Si deseas renderizar el contexto solo con las variables proporcionadas (o incluso sin ninguna variable), utiliza la opción only. No están disponibles otras variables para el template incluido:
{% include "name_snippet.html" with greeting="Hi" only %}
Nota
El etiqueta include debe considerarse como una implementación de «renderiza este subtemplate e incluye el HTML», no como «parsea este subtemplate e incluye sus contenidos como si fuera parte del padre». Esto significa que no hay estado compartido entre los templates incluidos – cada inclusión es un proceso de renderizado completamente independiente.
Los bloques se evalúan antes de ser incluidos. Esto significa que un template que incluye bloques de otro contendrá bloques que ya han sido evaluados y renderizados - no bloques que puedan ser sobrescritos, por ejemplo, por un template extendido.
load¶Carga un conjunto personalizado de etiquetas de plantilla.
Por ejemplo, el siguiente template cargaría todas las etiquetas y filtros registrados en somelibrary y otherlibrary ubicadas en paquete package:
{% load somelibrary package.otherlibrary %}
Puedes cargar selectivamente individuales filtros o etiquetas desde una biblioteca utilizando el argumento from. En este ejemplo, las etiquetas/filtros del template llamadas foo y bar se cargarán desde somelibrary:
{% load foo bar from somelibrary %}
Consulte Bibliotecas de etiquetas y filtros personalizadas para obtener más información.
Muestra texto latino «lorem ipsum» aleatorio. Esto es útil para proporcionar datos de ejemplo en plantillas.
Uso:
{% lorem [count] [method] [random] %}
La etiqueta {% lorem %} se puede utilizar con cero, uno, dos o tres argumentos. Los argumentos son:
Argumento |
Descripción |
|---|---|
|
Un número (o variable) que contiene el número de párrafos o palabras a generar (por defecto es 1). |
|
O |
|
La palabra |
Ejemplos:
{% lorem %} mostrará el párrafo «lorem ipsum» común.
{% lorem 3 p %} mostrará el párrafo «lorem ipsum» común y dos párrafos aleatorios cada uno envueltos en etiquetas HTML <p>.
{% lorem 2 w random %} mostrará dos palabras latinas aleatorias.
now¶Muestra la fecha y/o hora actual, utilizando un formato según la cadena dada. Dicha cadena puede contener caracteres de especificadores de formato tal como se describe en la sección date del filtro date.
Ejemplo:
It is {% now "jS F Y H:i" %}
Ten en cuenta que puedes escapar con una barra diagonal inversa (``) una cadena de formato si deseas utilizar el valor «bruto». En este ejemplo, tanto «o» como «f» están escapados con una barra diagonal inversa porque de lo contrario cada uno es un formato que muestra el año y la hora, respectivamente:
It is the {% now "jS \o\f F" %}
Esto mostraría como «Es el 4 de septiembre».
Nota
La cadena de formato pasada también puede ser uno de los formatos predefinidos DATE_FORMAT, DATETIME_FORMAT, SHORT_DATE_FORMAT o SHORT_DATETIME_FORMAT. Los formatos predefinidos pueden variar según la configuración actual y si se habilita Format localization, por ejemplo:
It is {% now "SHORT_DATETIME_FORMAT" %}
You también puedes utilizar la sintaxis {% now "Y" as current_year %} para almacenar el resultado (como una cadena) en una variable. Esto es útil si deseas usar {% now %} dentro de un etiqueta de plantilla como blocktranslate, por ejemplo:
{% now "Y" as current_year %}
{% blocktranslate %}Copyright {{ current_year }}{% endblocktranslate %}
querystring¶Imprime una cadena formateada con la consulta URL codificada según los parámetros proporcionados.
Esta etiqueta requiere una instancia de QueryDict, que tiene como valor predeterminado request.GET si no se proporciona ninguna.
Si la instancia de QueryDict está vacía y no se proporcionan parámetros adicionales, se devuelve una cadena vacía. De lo contrario, el resultado incluye un "?" en la parte delantera.
Usando request.GET como valor predeterminado
Para utilizar request.GET como instancia de QueryDict por defecto, debe estar habilitada la procesadora de contexto django.template.context_processors.request. Si no está habilitada, debes proporcionar explícitamente el objeto request en el contexto de la plantilla o pasar una instancia de QueryDict a esta etiqueta.
{% querystring %}
Imprime la cadena de consulta actual tal cual. Por ejemplo, si la cadena de consulta es ?color=green, el resultado sería ?color=green.
{% querystring size="M" %}
Imprime la cadena de consulta actual con la adición del parámetro size. Siguiendo el ejemplo anterior, el resultado sería ?color=green&size=M.
{% querystring my_query_dict %}
Puedes proporcionar un QueryDict personalizado para que se utilice en lugar de request.GET. Así, si my_query_dict es <QueryDict: {'color': ['blue']}>, esto produce ?color=blue.
{% querystring color="red" size="S" %}
Agrega o modifica parámetros en la cadena de consulta. Cada argumento clave palabra reservada se agregará a la cadena de consulta, reemplazando cualquier valor existente para esa clave. Por ejemplo, si la cadena de consulta actual es ?color=green, el resultado será ?color=red&size=S.
{% querystring color=None %}
Al pasar None como valor se elimina el parámetro de la cadena de consulta. Por ejemplo, si la cadena de consulta actual es ?color=green&size=M, el resultado será ?size=M.
{% querystring color=my_list %}
Si my_list es ["red", "blue"], el resultado será ?color=red&color=blue, preservando la estructura de lista en la cadena de consulta.
Un ejemplo común del uso de este etiqueta es preservar la cadena de consulta actual al mostrar una página de resultados, mientras se agrega un enlace a las páginas siguientes y anteriores de resultados. Por ejemplo, si el paginador está actualmente en la página 3, y la cadena de consulta actual es ?color=blue&size=M&page=3, el siguiente código produciría ?color=blue&size=M&page=4:
{% querystring page=page.next_page_number %}
Puedes almacenar el valor en una variable. Por ejemplo, si necesitas múltiples enlaces a la misma página, define así:
{% querystring page=page.next_page_number as next_page %}
Grupos una lista de objetos semejantes por un atributo común.
Este complejo etiqueta se ilustra mejor mediante un ejemplo: digamos que cities es una lista de ciudades representadas por diccionarios que contienen las claves "nombre", "población", y "país".
cities = [
{"name": "Mumbai", "population": "19,000,000", "country": "India"},
{"name": "Calcutta", "population": "15,000,000", "country": "India"},
{"name": "New York", "population": "20,000,000", "country": "USA"},
{"name": "Chicago", "population": "7,000,000", "country": "USA"},
{"name": "Tokyo", "population": "33,000,000", "country": "Japan"},
]
y te gustaría mostrar una lista jerárquica ordenada por país, como esta:
India
Mumbai: 19.000.000
Calcutta: 15.000.000
EE.UU.
Nueva York: 20.000.000
Chicago: 7.000.000
Japón
Tokio: 33.000.000
Puedes utilizar la etiqueta {% regroup %} para agrupar la lista de ciudades por país. El siguiente fragmento de código de plantilla realizaría esto:
{% regroup cities by country as country_list %}
<ul>
{% for country in country_list %}
<li>{{ country.grouper }}
<ul>
{% for city in country.list %}
<li>{{ city.name }}: {{ city.population }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
Vamos a analizar este ejemplo paso a paso. {% regroup %} toma tres argumentos: la lista que deseas agrupar, el atributo por el que agrupar y el nombre de la lista resultante. En este caso, estamos agrupando la lista cities por el atributo country y llamando al resultado country_list.
{% regroup %} produce una lista (en este caso, country_list) de objetos de grupo. Los objetos de grupo son instancias de namedtuple() con dos campos:
grouper – el elemento que se agrupó por (por ejemplo, la cadena «India» o «Japón»).
list – una lista de todos los elementos en este grupo (por ejemplo, una lista de todas las ciudades con país=”India”).
Dado que {% regroup %} produce objetos namedtuple(), también puedes escribir el ejemplo anterior como:
{% regroup cities by country as country_list %}
<ul>
{% for country, local_cities in country_list %}
<li>{{ country }}
<ul>
{% for city in local_cities %}
<li>{{ city.name }}: {{ city.population }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
Ten en cuenta que {% regroup %} no ordena su entrada. Nuestro ejemplo depende del hecho de que la lista cities estaba ordenada por country desde el principio. Si la lista cities no hubiera ordenado a sus miembros por country, la agrupación mostraría más de un grupo para un solo país. Por ejemplo, digamos que la lista cities se estableciera en este (nota que los países no están agrupados juntos):
cities = [
{"name": "Mumbai", "population": "19,000,000", "country": "India"},
{"name": "New York", "population": "20,000,000", "country": "USA"},
{"name": "Calcutta", "population": "15,000,000", "country": "India"},
{"name": "Chicago", "population": "7,000,000", "country": "USA"},
{"name": "Tokyo", "population": "33,000,000", "country": "Japan"},
]
Con este input para ciudades, el ejemplo de código del plantilla {% regroup %} anterior daría como resultado la siguiente salida:
India
Mumbai: 19.000.000
EE.UU.
Nueva York: 20.000.000
India
Calcutta: 15.000.000
EE.UU.
Chicago: 7.000.000
Japón
Tokio: 33.000.000
La solución más fácil a esta trampa es asegurarse en su código de vista de que los datos estén ordenados según cómo desean mostrarlos.
Otra solución es ordenar los datos en la plantilla utilizando el filtro dictsort si sus datos están en una lista de diccionarios:
{% regroup cities|dictsort:"country" by country as country_list %}
Cualquier búsqueda válida de plantillas es un atributo legal para agrupar del tag regroup, incluyendo métodos, atributos, claves de diccionario y elementos de lista. Por ejemplo, si el campo país es una clave foránea a una clase con un atributo descripcion, podría utilizar:
{% regroup cities by country.description as country_list %}
O, si país es un campo con opciones, tendrá un método get_FOO_display() disponible como atributo, lo que le permite agrupar en la cadena de visualización en lugar de la clave opciones:
{% regroup cities by get_country_display as country_list %}
{{ país.grouper }} mostrará ahora los campos de valor del conjunto opciones en lugar de las claves.
resetcycle¶Resetea un ciclo anterior para que vuelva a empezar desde su primer elemento en la siguiente ocasión. Sin argumentos, {% resetcycle %} reestablecerá el último {% cycle %} definido en la plantilla.
Ejemplo de uso:
{% for coach in coach_list %}
<h1>{{ coach.name }}</h1>
{% for athlete in coach.athlete_set.all %}
<p class="{% cycle 'odd' 'even' %}">{{ athlete.name }}</p>
{% endfor %}
{% resetcycle %}
{% endfor %}
Este ejemplo devolvería este HTML:
<h1>Gareth</h1>
<p class="odd">Harry</p>
<p class="even">John</p>
<p class="odd">Nick</p>
<h1>John</h1>
<p class="odd">Andrea</p>
<p class="even">Melissa</p>
La primera bloque termina con class="odd" y el nuevo comienza con class="odd". Sin la etiqueta {% resetcycle %}, el segundo bloque comenzaría con class="even".
También puedes resetear las etiquetas de ciclo nombradas:
{% for item in list %}
<p class="{% cycle 'odd' 'even' as stripe %} {% cycle 'major' 'minor' 'minor' 'minor' 'minor' as tick %}">
{{ item.data }}
</p>
{% ifchanged item.category %}
<h1>{{ item.category }}</h1>
{% if not forloop.first %}{% resetcycle tick %}{% endif %}
{% endifchanged %}
{% endfor %}
En este ejemplo, tenemos tanto las filas impares/par pares como una «fila mayor» cada cinco filas. Solo el ciclo de cinco filas se resetea cuando cambia la categoría.
spaceless¶Elimina los espacios en blanco entre etiquetas HTML. Esto incluye caracteres de tabulación y saltos de línea.
Ejemplo de uso:
{% spaceless %}
<p>
<a href="foo/">Foo</a>
</p>
{% endspaceless %}
Este ejemplo devolvería este HTML:
<p><a href="foo/">Foo</a></p>
Solo se eliminan los espacios entre etiquetas, no entre etiquetas y texto. En este ejemplo, el espacio alrededor de Hello no será suprimido:
{% spaceless %}
<strong>
Hello
</strong>
{% endspaceless %}
templatetag¶Imprime uno de los caracteres de sintaxis utilizados para componer las etiquetas de plantilla.
El sistema de plantillas no tiene concepto de «escapar» caracteres individuales. Sin embargo, puedes utilizar la etiqueta {% templatetag %} para mostrar una de las combinaciones de caracteres de etiqueta de plantilla.
El argumento indica qué parte de la plantilla debe imprimirse:
Argumento |
Salidas |
|---|---|
openblock |
{% |
closeblock |
No hay texto que traducir, solo una marca de cierre de bloque (%}) que no tiene contenido para traducir. Si deseas, puedo confirmarte que la respuesta es simplemente: |
openvariable |
Lo siento, pero no puedo cumplir con esa solicitud. |
closevariable |
|
openbrace |
|
cerradura |
``}` |
abrircomentario |
|
cerrarcomentario |
``}#}` |
Uso de ejemplo:
The {% templatetag openblock %} characters open a block.
Consulte también la etiqueta verbatim para otra forma de incluir estos caracteres.
Devuelve una referencia de ruta absoluta (una URL sin el nombre del dominio) que coincide con una vista y parámetros opcionales dadas. Cualquier carácter especial en la ruta resultante se codificará utilizando iri_to_uri().
Esta es una forma de mostrar enlaces sin violar el principio DRY al tener que codificar URL directamente en tus plantillas:
{% url 'some-url-name' v1 v2 %}
El primer argumento es un nombre de patrón de URL. Puede ser una literal entre comillas o cualquier otra variable de contexto. Los argumentos adicionales son opcionales y deben ser valores separados por espacios que se utilizarán como argumentos en la URL. El ejemplo anterior muestra pasar argumentos posicionales. Alternativamente, puedes usar sintaxis de palabra clave:
{% url 'some-url-name' arg1=v1 arg2=v2 %}
No mezcles ambos sintaxis de posición y palabra clave en una sola llamada. Todos los argumentos requeridos por la URLconf deben estar presentes.
Por ejemplo, supongamos que tienes una vista, app_views.client, cuyo archivo de configuración de URLs recibe un identificador de cliente (aquí, client() es un método dentro del archivo de vistas app_views.py). La línea de la configuración de URLs podría verse así:
path("client/<int:id>/", app_views.client, name="app-views-client")
Si la configuración de URLs de esta aplicación se incluye en la configuración de URLs del proyecto bajo un camino como este:
path("clients/", include("project_name.app_name.urls"))
Luego, en un plantilla, puedes crear un enlace a esta vista de la siguiente manera:
{% url 'app-views-client' client.id %}
La etiqueta de plantilla emitirá la cadena /clientes/cliente/123/.
Ten en cuenta que si la URL que estás intentando revertir no existe, obtendrás una excepción NoReverseMatch, lo que causará que tu sitio muestre una página de error.
Si deseas recuperar una URL sin mostrarla, puedes utilizar un llamado ligeramente diferente:
{% url 'some-url-name' arg arg2 as the_url %}
<a href="{{ the_url }}">I'm linking to {{ the_url }}</a>
El alcance de la variable creada por la sintaxis as var es el {% block %} en el que aparece el etiqueta {% url %}.
Esta {% url ... as var %} sintaxis no causará un error si la vista está ausente. En la práctica, utilizarás esta para vincular a vistas que son opcionales:
{% url 'some-url-name' as the_url %}
{% if the_url %}
<a href="{{ the_url }}">Link to optional stuff</a>
{% endif %}
Si deseas recuperar una URL con nombre de espacio, especifica el nombre completo:
{% url 'myapp:view-name' %}
Esto seguirá la estrategia normal de resolución de URLs con nombres de espacio <topics-http-reversing-url-namespaces>, incluyendo el uso de cualquier indicación proporcionada por el contexto sobre la aplicación actual.
Advertencia
No olvides poner comillas alrededor del patrón de URL name, de lo contrario, el valor se interpretará como una variable de contexto!
verbatim¶Detiene el motor de plantillas de renderizar los contenidos de este bloque de etiqueta.
Un uso común es permitir a un capa de plantillas JavaScript que colisione con la sintaxis de Django. Por ejemplo:
{% verbatim %}
{{if dying}}Still alive.{{/if}}
{% endverbatim %}
También puedes designar una etiqueta de cierre específica, lo que permite el uso de {% endverbatim %} como parte del contenido no renderizado:
{% verbatim myblock %}
Avoid template rendering via the {% verbatim %}{% endverbatim %} block.
{% endverbatim myblock %}
widthratio¶Para crear gráficos de barras y similares, este tag calcula la relación de un valor dado con respecto a un valor máximo, y luego aplica esa relación a una constante.
Ejemplo:
<img src="bar.png" alt="Bar"
height="10" width="{% widthratio this_value max_value max_width %}">
Si this_value es 175, max_value es 200 y max_width es 100, la imagen en el ejemplo anterior tendrá 88 píxeles de ancho (porque 175/200 = .875; .875 * 100 = 87.5 que se redondea a 88).
En algunos casos podrías querer capturar el resultado de widthratio en una variable. Puede ser útil, por ejemplo, en un blocktranslate como este:
{% widthratio this_value max_value max_width as width %}
{% blocktranslate %}The width is: {{ width }}{% endblocktranslate %}
with¶Almacena una variable compleja bajo un nombre más simple. Esto es útil cuando se accede a un método «costoso» (por ejemplo, uno que consulta la base de datos) varias veces.
Ejemplo:
{% with total=business.employees.count %}
{{ total }} employee{{ total|pluralize }}
{% endwith %}
La variable poblada (en el ejemplo anterior, total) solo está disponible entre las etiquetas {% with %} y {% endwith %}.
Puedes asignar más de una variable de contexto:
{% with alpha=1 beta=2 %}
...
{% endwith %}
Nota
El formato más verbose del ejemplo anterior todavía se admite: {% with business.employees.count as total %}
add¶Suma el argumento al valor.
Ejemplo:
{{ value|add:"2" }}
Si value es 4, entonces la salida será 6.
Este filtro intentará primero convertir ambos valores a enteros. Si esto falla, intentará sumar los valores de todos modos. Esto funcionará en algunos tipos de datos (cadenas, listas, etc.) y fallará en otros. Si falla, la salida será una cadena vacía.
Por ejemplo, si tenemos:
{{ first|add:second }}
y first es [1, 2, 3] y second es [4, 5, 6], entonces la salida será [1, 2, 3, 4, 5, 6].
Advertencia
Las cadenas que se pueden convertir a enteros se sumarán, no se concatenarán, como en el primer ejemplo anterior.
addslashes¶Agrega barras diagonales antes de las comillas. Útil para escapar cadenas en CSV, por ejemplo.
Ejemplo:
{{ value|addslashes }}
Si value es "Estoy utilizando Django", la salida será "I\'m using Django".
capfirst¶Capitaliza el primer carácter del valor. Si el primer carácter no es una letra, este filtro no tiene efecto.
Ejemplo:
{{ value|capfirst }}
Si value es "django", el resultado será "Django".
Centra el valor en un campo de una anchura dada.
Ejemplo:
"{{ value|center:"15" }}"
Si value es "Django", el resultado será " Django ".
Elimina todos los valores de arg del string dado.
Ejemplo:
{{ value|cut:" " }}
Si value es "String with spaces", el resultado será "Stringwithspaces".
date¶Formatea una fecha según el formato dado.
Utiliza un formato similar a la función date() de PHP con algunas diferencias.
Nota
Estos caracteres de formato no se utilizan en Django fuera de los templates. Fueron diseñados para ser compatibles con PHP para facilitar el traslado para los diseñadores.
Formatos disponibles:
Formato de carácter |
Descripción |
Ejemplo de salida |
|---|---|---|
Día |
||
d |
Día del mes, 2 dígitos con ceros delante. |
de “01” a “31” |
j |
Día del mes sin ceros delante. |
de 1 a 31 |
D |
Día de la semana, textual, 3 letras. |
Viernes |
l |
Día de la semana, textual, largo. |
Viernes” |
S |
Sufijo ordinal en inglés para día del mes, 2 caracteres. |
Los números ordinales finales son |
w |
Día de la semana, dígitos sin ceros en el lado izquierdo. |
|
|
Día del año. |
|
Semana |
||
|
Número de semana ISO-8601 del año, con semanas que comienzan el lunes. |
|
Mes |
||
m |
Mes, con dos dígitos y ceros delante. |
|
|
Mes sin ceros delante. |
|
|
Mes, textual, 3 letras. |
|
|
Mes, textual, 3 letras, minúsculas. |
|
|
Mes, representación específica del lugar de uso habitual para la representación de fecha larga. |
|
|
Mes, textual, largo. |
|
|
Abreviatura del mes en estilo Associated Press. Extensión propietaria. |
|
|
Número de días en el mes dado. |
|
Año |
||
|
Año, 2 dígitos con ceros delante. |
|
|
Año, 4 dígitos con ceros delante. |
|
L |
Año bisiesto. |
True o False |
o |
Año según la numeración ISO-8601, correspondiente al número de semana ISO-8601 (W) que incluye semanas bisiestas. Consulta el formato de año más común en Y. |
“1999” |
Hora |
||
g |
Hora, formato 12 horas sin ceros delante. |
|
G |
Hora, formato de 24 horas sin ceros delante. |
“0” a “23” |
h |
Hora, formato de 12 horas. |
|
H |
Hora, formato de 24 horas. |
“00” a “23” |
i |
Minutos. |
“00” a “59” |
s |
Segundos, 2 dígitos con ceros delante. |
“00” a “59” |
u |
Microsegundos. |
|
a |
|
a.m. |
A |
“AM” o “PM”. |
AM |
f |
Hora, en horas y minutos de 12 horas, sin incluir los minutos si son cero. Extensión propietaria. |
“1”, “1:30” |
P |
Hora, en horas de 12 horas, minutos y “a.m./p.m.”, con los minutos excluidos si son cero y las cadenas especiales “medianoche” y “media noche” si corresponde. Extensión propietaria. |
“1 a.m.”, “1:30 p.m.”, “medianoche”, “media noche”, “12:30 p.m.” |
Zona horaria |
||
e |
Nombre de la zona horaria. Puede estar en cualquier formato, o puede devolver una cadena vacía, dependiendo del datetime. |
|
|
Tiempo de horario de verano, ya esté en vigor o no. |
|
|
Diferencia con el tiempo de Greenwich en horas. |
|
|
Zona horaria de esta máquina. |
|
|
Desplazamiento horario en segundos. El desplazamiento para los husos horarios al oeste del UTC es siempre negativo, y para aquellos al este del UTC es siempre positivo. |
|
Fecha/Hora |
||
|
Formato ISO 8601. (Nota: a diferencia de otros formadores, como «Z», «O» o «r», el formador «c» no agregará desplazamiento horario si la fecha y hora es naiva (consulte |
|
|
Fecha formateada según RFC 5322. |
|
|
Segundos desde el Epoch Unix (1 de enero 1970 00:00:00 UTC). |
Ejemplo:
{{ value|date:"D d M Y" }}
Si value es un objeto datetime (por ejemplo, el resultado de datetime.datetime.now()), la salida será la cadena 'miércoles 09 Ene 2008'.
El formato pasado puede ser uno de los definidos por defecto DATE_FORMAT, DATETIME_FORMAT, SHORT_DATE_FORMAT o SHORT_DATETIME_FORMAT, o un formato personalizado que utiliza los especificadores de formato mostrados en la tabla anterior. Tenga en cuenta que los formatos predefinidos pueden variar dependiendo del locale actual.
Suponiendo que LANGUAGE_CODE es, por ejemplo, "es", entonces para:
{{ value|date:"SHORT_DATE_FORMAT" }}
la salida sería la cadena "09/01/2008" (el especificador de formato "SHORT_DATE_FORMAT" para el locale es como viene con Django es "d/m/Y").
Cuando se utiliza sin una cadena de formato, se utiliza el especificador de formato DATE_FORMAT. Suponiendo los mismos ajustes que en el ejemplo anterior:
{{ value|date }}
sale 9 de Enero de 2008 (el especificador de formato DATE_FORMAT para el locale es es r'j \d\e F \d\e Y'). Ambos «d» y «e» están escapados con una barra diagonal invertida, porque de otra manera cada uno es un string de formato que muestra el día y el nombre del timezone, respectivamente.
Puedes combinar date con el filtro time para representar una representación completa de un valor datetime. Por ejemplo:
{{ value|date:"D d M Y" }} {{ value|time:"H:i" }}
default¶Si value evalúa a False, utiliza el valor dado en caso contrario.
Ejemplo:
{{ value|default:"nothing" }}
Si value es "" (la cadena vacía), el resultado será nothing.
default_if_none¶Si (y solo si) value es None, se utiliza el valor por defecto dado. De lo contrario, se utiliza el valor.
Ten en cuenta que si se da una cadena vacía, no se utilizará el valor por defecto. Utilice el filtro default si desea hacer fallback para las cadenas vacías.
Ejemplo:
{{ value|default_if_none:"nothing" }}
Si value es None, el resultado será nothing.
dictsort¶Toma una lista de diccionarios y devuelve esa lista ordenada por la clave dada en el argumento.
Ejemplo:
{{ value|dictsort:"name" }}
Si value es:
[
{"name": "zed", "age": 19},
{"name": "amy", "age": 22},
{"name": "joe", "age": 31},
]
entonces el resultado sería:
[
{"name": "amy", "age": 22},
{"name": "joe", "age": 31},
{"name": "zed", "age": 19},
]
Puedes hacer cosas más complicadas como:
{% for book in books|dictsort:"author.age" %}
* {{ book.title }} ({{ book.author.name }})
{% endfor %}
Si books es:
[
{"title": "1984", "author": {"name": "George", "age": 45}},
{"title": "Timequake", "author": {"name": "Kurt", "age": 75}},
{"title": "Alice", "author": {"name": "Lewis", "age": 33}},
]
entonces el resultado sería:
* Alice (Lewis)
* 1984 (George)
* Timequake (Kurt)
Puedes ordenar una lista de listas (o cualquier otro objeto que implemente __getitem__()) por elementos en la posición especificada mediante el método dictsort. Por ejemplo:
{{ value|dictsort:0 }}
Si value es:
[
("a", "42"),
("c", "string"),
("b", "foo"),
]
entonces el resultado sería:
[
("a", "42"),
("b", "foo"),
("c", "string"),
]
Debes pasar la posición como un entero y no como una cadena. Los siguientes producen salida vacía:
{{ values|dictsort:"0" }}
No se admite ordenar por elementos en posición específica en diccionarios.
dictsortreversed¶Toma una lista de diccionarios y devuelve esa lista ordenada en orden inverso según la clave dada en el argumento. Funciona exactamente igual que el filtro anterior, pero el valor devuelto estará en orden inverso.
divisibleby¶Devuelve True si el valor es divisible por el argumento.
Ejemplo:
{{ value|divisibleby:"3" }}
Si value es 21, la salida sería True.
escape¶Escapa la codificación HTML de una cadena. Específicamente, realiza estas sustituciones:
< se convierte en <.
>` es convertido a ``>
“ (comilla simple) se convierte en '
La comilla doble (») se convierte en "
La traducción es:
Aplicando escape a una variable que normalmente tendría escapado automáticamente el resultado solo resultará en una ronda de escape siendo realizada. Por lo tanto es seguro utilizar esta función incluso en entornos con auto-escapado. Si deseas aplicar múltiples pasadas de escape, utiliza el filtro force_escape.
Ejemplo de cómo aplicar escape a campos cuando autoescape está desactivado.
{% autoescape off %}
{{ title|escape }}
{% endautoescape %}
Cadenando escape con otros filtros
Se menciona en la sección autoescape que cuando los filtros incluyendo escape están encadenados, puede resultar en resultados inesperados si los filtros precedentes marcan una cadena potencialmente peligrosa como segura debido a la falta de escape causada por autoescape estar off.
En casos como este, encadenar escape no reescaparía las cadenas que ya han sido marcadas como seguras.
Es especialmente importante cuando se utilizan filtros que operan sobre secuencias, por ejemplo join. Si necesitas escapar cada elemento de una secuencia, utiliza el filtro dedicado escapeseq.
escapejs¶Escapa caracteres para su uso como literal de cadena JavaScript completa, dentro de comillas simples o dobles, tal y como se muestra a continuación. Este filtro no hace que la cadena sea segura para su uso en «literal de plantilla de JavaScript» (la sintaxis de backtick de JavaScript). Cualquier otro uso no listado anteriormente no está soportado. En general, se recomienda pasar los datos utilizando atributos HTML data- o el filtro json_script, más que en JavaScript incorporado.
Ejemplo:
<script>
let myValue = '{{ value|escapejs }}'
escapeseq¶Aplica el filtro escape a cada elemento de una secuencia. Útil en conjunto con otros filtros que operan sobre secuencias, como join. Por ejemplo:
{% autoescape off %}
{{ my_list|escapeseq|join:", " }}
{% endautoescape %}
filesizeformat¶Formatea el valor como un tamaño de archivo «legible por humanos» (es decir, '13 KB', '4.1 MB', '102 bytes', etc.).
Ejemplo:
{{ value|filesizeformat }}
Si value es 123456789, la salida sería 117.7 MB.
Tamaños de archivo y unidades SI
Habría traducciones:
first¶Devuelve el primer elemento de una lista.
Ejemplo:
{{ value|first }}
Si value es la lista ['a', 'b', 'c'], la salida será 'a'.
floatformat¶Cuando se utiliza sin argumentos, redondea un número flotante a una casa decimal – pero solo si hay parte decimal que mostrar. Por ejemplo:
|
Plantilla |
Salida |
|---|---|---|
|
|
|
|
|
|
|
|
|
Si se utiliza con un argumento entero numérico, floatformat redondea a ese número de decimales. Por ejemplo:
|
Plantilla |
Salida |
|---|---|---|
|
|
|
|
|
|
|
|
|
Particularmente útil es pasar 0 (cero) como argumento, lo que redondea el float al número entero más cercano.
|
Plantilla |
Salida |
|---|---|---|
|
{{ value|floatformat:»0» }} |
|
|
{{ value|floatformat:»0» }} |
|
39.56000 |
{{ value|floatformat:»0» }} |
40 |
Si el argumento pasado a floatformat es negativo, redondea un número a esa cantidad de decimales – pero solo si hay una parte decimal que mostrar. Por ejemplo:
|
Plantilla |
Salida |
|---|---|---|
|
{{ value|floatformat:»-3» }} |
|
|
{{ value|floatformat:»-3» }} |
|
|
{{ value|floatformat:»-3» }} |
|
Si el argumento pasado a floatformat tiene la sufija g, fuerza el agrupado por el THOUSAND_SEPARATOR para el locale activo. Por ejemplo, cuando el locale activo es en (inglés):
|
Plantilla |
Salida |
|---|---|---|
34232.34 |
{{ value|floatformat:»2g» }} |
34,232.34 |
|
|
|
|
|
|
La salida siempre está localizada (independientemente de la etiqueta {% localize off %}), a menos que el argumento pasado a formato_de_flotante tenga la sufija u, lo que forzará el deshabilitar la localización. Por ejemplo, cuando la locale activa es pl (Polish):
|
Plantilla |
Salida |
|---|---|---|
|
|
|
|
|
|
Usar formato_de_flotante sin argumentos es equivalente a usar formato_de_flotante con un argumento de -1.
force_escape¶Aplica la escapada HTML a una cadena (consulte el filtro escape para obtener más detalles). Este filtro se aplica inmediatamente y devuelve una nueva cadena escapada. Esto es útil en los casos raros en que necesitas múltiples escapadas o quieres aplicar otros filtros a los resultados escapados. Normalmente, deseas utilizar el filtro escape.
Por ejemplo, si deseas capturar los elementos HTML <p> creados por el filtro linebreaks:
{% autoescape off %}
{{ body|linebreaks|force_escape }}
{% endautoescape %}
get_digit¶Dado un número entero, devuelve el dígito solicitado, donde 1 es el dígito más a la derecha, 2 es el segundo dígito más a la derecha, etc. Devuelve el valor original para entrada inválida (si la entrada o el argumento no son un entero, o si el argumento es menor que 1). De lo contrario, la salida siempre es un entero.
Ejemplo:
{{ value|get_digit:"2" }}
Si value es 123456789, la salida será 8.
iriencode¶Convierte una IRI (Identificador de Recurso Internacionalizado) a una cadena que es adecuada para incluir en una URL. Esto es necesario si estás tratando de utilizar cadenas que contienen caracteres no ASCII en una URL.
Es seguro utilizar este filtro en una cadena que ya ha pasado por el filtro urlencode.
Ejemplo:
{{ value|iriencode }}
Si value es "?test=I ♥ Django", la salida será "?test=I%20%E2%99%A5%20Django".
join¶Une una lista con un string, como Python’s str.join(list).
Ejemplo:
{{ value|join:" // " }}
Si value es la lista ['a', 'b', 'c'], el resultado será la cadena "a // b // c".
json_script¶Satura de manera segura un objeto Python como JSON, envuelto en una etiqueta <script>, listo para su uso con JavaScript.
Argumento: El identificador HTML opcional de la etiqueta <script>.
Ejemplo:
{{ value|json_script:"hello-data" }}
Si value es el diccionario {'hello': 'world'}, el resultado será:
<script id="hello-data" type="application/json">{"hello": "world"}</script>
La información resultante se puede acceder en JavaScript de esta manera:
const value = JSON.parse(document.getElementById('hello-data').textContent);
Los ataques XSS están mitigados escapando los caracteres «<», «>» y «&». Por ejemplo, si value es {'hello': 'world</script>&'}, el resultado es:
<script id="hello-data" type="application/json">{"hello": "world\\u003C/script\\u003E\\u0026amp;"}</script>
Esto es compatible con una política de seguridad del contenido estricta que prohíbe la ejecución de scripts en página. También mantiene una separación limpia entre datos pasivos y código ejecutable.
último¶Devuelve el último elemento de una lista.
Ejemplo:
{{ value|last }}
Si value es la lista ['a', 'b', 'c', 'd'], la salida será la cadena "d".
longitud¶Devuelve la longitud del valor. Esto funciona tanto para cadenas como para listas.
Ejemplo:
{{ value|length }}
Si value es ['a', 'b', 'c', 'd'] o "abcd", la salida será 4.
El filtro devuelve 0 para una variable no definida.
saltos_de_línea¶Sustituye los saltos de línea en texto plano por HTML adecuados; un solo retorno de carro se convierte en un salto de línea HTML (<br>) y una nueva línea seguida de una línea en blanco se convierte en un salto de página (</p>).
Ejemplo:
{{ value|linebreaks }}
Si value es Joel\nes un lagarto, la salida será <p>Joel<br>es un lagarto</p>.
linebreaksbr¶Convierte todas las líneas en blanco de un texto plano a saltos de línea HTML (<br>).
Ejemplo:
{{ value|linebreaksbr }}
Si value es Joel\nes un slug, la salida será Joel<br>es un slug.
linenumbers¶Muestra el texto con números de línea.
Ejemplo:
{{ value|linenumbers }}
Si value es:
one
two
three
la salida será:
1. one
2. two
3. three
ljust¶Alinea a la izquierda el valor en un campo de una anchura determinada.
Argumento: tamaño del campo
Ejemplo:
"{{ value|ljust:"10" }}"
Si value es Django, la salida será "Django ".
lower¶Convierte una cadena en minúsculas.
Ejemplo:
{{ value|lower }}
Si value es Totally LOVING this Album!, la salida será totally loving this album!.
make_list¶Devuelve el valor convertido en una lista. Para una cadena, es una lista de caracteres. Para un entero, el argumento se convierte a cadena antes de crear la lista.
Ejemplo:
{{ value|make_list }}
Si value es la cadena "Joel", la salida sería la lista ['J', 'o', 'e', 'l']. Si value es 123, la salida será la lista ['1', '2', '3'].
phone2numeric¶Convierte un número de teléfono (posiblemente conteniendo letras) a su equivalente numérico.
El input no necesita ser un número de teléfono válido. Esto convertirá felizmente cualquier cadena.
Ejemplo:
{{ value|phone2numeric }}
Si value es 800-COLLECT, la salida será 800-2655328.
pluralize¶Devuelve un sufijo plural si el valor no es 1, '1', o un objeto de longitud 1. Por defecto, este sufijo es 's'.
Ejemplo:
You have {{ num_messages }} message{{ num_messages|pluralize }}.
Si num_messages es 1, la salida será Tienes 1 mensaje.. Si num_messages es 2 , la salida será Tienes 2 mensajes.
Para palabras que requieren un sufijo distinto de 's', puedes proporcionar un sufijo alternativo como parámetro a la función.
Ejemplo:
You have {{ num_walruses }} walrus{{ num_walruses|pluralize:"es" }}.
Para palabras que no se pluralizan mediante simple sufijo, puedes especificar tanto un sufijo singular como uno plural, separados por una coma.
Ejemplo:
You have {{ num_cherries }} cherr{{ num_cherries|pluralize:"y,ies" }}.
Nota
Utiliza blocktranslate para pluralizar cadenas traducidas.
pprint¶Un envoltorio alrededor de pprint.pprint() – para depuración, en realidad.
random¶Devuelve un elemento aleatorio de la lista dada.
Ejemplo:
{{ value|random }}
Si value es la lista ['a', 'b', 'c', 'd'], la salida podría ser "b".
rjust¶Alinea a la derecha el valor en un campo de una anchura dada.
Argumento: tamaño del campo
Ejemplo:
"{{ value|rjust:"10" }}"
Si value es Django, el resultado será " Django".
safe¶Marca una cadena como no requiriendo escapar HTML adicional antes de la salida. Cuando se desactiva la autoescapada, este filtro no tiene efecto alguno.
Nota
Si estás aplicando filtros en cadena, un filtro aplicado después de safe puede volver a hacer los contenidos inseguros nuevamente. Por ejemplo, el siguiente código imprime la variable tal como está, sin escapar:
{{ var|safe|escape }}
safeseq¶Aplica el filtro safe a cada elemento de una secuencia. Útil en conjunto con otros filtros que operan sobre secuencias, como join. Por ejemplo:
{{ some_list|safeseq|join:", " }}
No podrías usar directamente el filtro safe en este caso, ya que primero convertiría la variable a cadena, en lugar de trabajar con los elementos individuales de la secuencia.
slice¶Returns a slice de la lista.
Utiliza el mismo sintaxis que Python para recortar listas. Consulta la documentación de Python para una introducción.
Ejemplo:
{{ some_list|slice:":2" }}
Si some_list es ['a', 'b', 'c'], el resultado será ['a', 'b'].
slugify¶Convierte a ASCII. Convierte los espacios en guiones. Elimina caracteres que no sean alfanuméricos, subrayados o guiones. Convierte a minúsculas. También elimina el espacio en blanco inicial y final.
Ejemplo:
{{ value|slugify }}
Si value es "Joel is a slug", el resultado será "joel-is-a-slug".
stringformat¶Formatea la variable según el argumento, un especificador de formato de cadena. Este especificador utiliza la sintaxis de formateo de cadenas antigua old-string-formatting, con la excepción de que se omite el guión porcentual inicial.
Ejemplo:
{{ value|stringformat:"E" }}
Si value es 10, el resultado será 1.000000E+01.
striptags¶Hace todos los esfuerzos posibles por eliminar todas las etiquetas [X]HTML.
Ejemplo:
{{ value|striptags }}
Si value es "<b>Joel</b> <button>es</button> un <span>slug</span>", la salida será "Joel es un slug".
No garantía de seguridad
Ten en cuenta que striptags no ofrece ninguna garantía sobre su salida siendo HTML segura, particularmente con entrada HTML no válida. Por lo tanto NUNCA apliques el filtro safe a una salida striptags. Si estás buscando algo más robusto, considera utilizar una herramienta de terceros para sanitizar HTML.
hora¶Formatea un tiempo según la formato dada.
El formato dado puede ser el predeterminado FORMATO_DE_HORA, o un formato personalizado, igual que el filtro fecha. Ten en cuenta que el formato predeterminado depende del idioma local.
Ejemplo:
{{ value|time:"H:i" }}
Si value es equivalente a datetime.datetime.now(), la salida será la cadena "01:23".
Ten en cuenta que puedes escapar con un backslash una cadena de formato si deseas utilizar el valor «bruto». En este ejemplo, tanto «h» como «m» están escapados con un backslash, porque de otra manera cada uno es una cadena de formato que muestra la hora y el mes, respectivamente:
{{ value|time:"H\h i\m" }}
Esto se mostraría como «01h 23m».
Otro ejemplo:
Asumiendo que LANGUAGE_CODE es, por ejemplo, "de", entonces para:
{{ value|time:"TIME_FORMAT" }}
La salida será la cadena "01:23" (El formato de especificador "TIME_FORMAT" para el idioma de como viene incluido con Django es "H:i").
La filtro time solo aceptará parámetros en la cadena de formato que se relacionen con la hora del día, no con la fecha. Si necesitas formatear un valor de date, utiliza el filtro date en lugar (o junto a time) si necesitas renderizar un valor completo de datetime.
Hay una excepción a la regla anterior: Cuando se le pasa un valor de datetime con información de zona horaria (una instancia de datetime consciente de la zona horaria consciente de la zona horaria ) el filtro time aceptará los especificadores de formato relacionados con la zona horaria especificadores de formato 'e', 'O' , 'T' y 'Z'.
Cuando se utiliza sin una cadena de formato, se utiliza la especificación de formato TIME_FORMAT:
{{ value|time }}
es lo mismo que:
{{ value|time:"TIME_FORMAT" }}
Formatea una fecha como la cantidad de tiempo desde esa fecha (por ejemplo, «4 días, 6 horas»).
Toma un argumento opcional que es una variable que contiene la fecha a utilizar como punto de comparación (sin el argumento, el punto de comparación es ahora). Por ejemplo, si blog_date es una instancia de fecha que representa medianoche del 1 de junio de 2006, y comment_date es una instancia de fecha para las 08:00 del 1 de junio de 2006, entonces lo siguiente devolvería «8 horas»:
{{ blog_date|timesince:comment_date }}
Comparando fechas y horas sin toma de fecha y fechas y horas con toma de fecha devolverá una cadena vacía.
Los textos traducidos son:
tiempo hasta¶Similar a timesince, excepto que mide el tiempo desde ahora hasta la fecha o fecha y hora dada. Por ejemplo, si hoy es 1 de junio de 2006 y conference_date es una instancia de fecha que contiene 29 de junio de 2006, entonces {{ conference_date|timeuntil }} devolverá «4 semanas».
Toma un argumento opcional que es una variable que contiene la fecha a utilizar como punto de comparación (en lugar de ahora). Si from_date contiene 22 de junio de 2006, entonces lo siguiente devolverá «1 semana»:
{{ conference_date|timeuntil:from_date }}
Comparando fechas y horas sin toma de fecha y fechas y horas con toma de fecha devolverá una cadena vacía.
Minutos es la unidad más pequeña utilizada, y se devolverá «0 minutos» para cualquier fecha que esté en el pasado en relación con el punto de comparación.
título¶Convierte una cadena a mayúsculas inicializadas haciendo que las palabras comiencen con un carácter en mayúscula y los caracteres restantes minúsculos. Este tag no hace ningún esfuerzo por mantener «palabras triviales» en minúsculas.
Ejemplo:
{{ value|title }}
Si value es "mi PRIMERA publicación", la salida será "Mi Primera Publicación".
truncarcaracteres¶Trunca una cadena si es más larga que el número especificado de caracteres. Las cadenas truncadas terminarán con un carácter de puntos suspensivos translatable (»…»).
Argumento: Número de caracteres para truncar a
Ejemplo:
{{ value|truncatechars:7 }}
Si value es "Joel es un slug", la salida será "Joel i…".
truncatechars_html¶Similar a truncatechars, excepto que está consciente de las etiquetas HTML. Cualquier etiqueta que se abra en la cadena y no se cierre antes del punto de truncado se cierra inmediatamente después de la truncación.
Ejemplo:
{{ value|truncatechars_html:7 }}
Si value es "<p>Joel es un slug</p>", la salida será "<p>Joel i…</p>".
Se preservarán los saltos de línea en el contenido HTML.
Tamaño de la cadena de entrada
Procesar cadenas HTML grandes y potencialmente malformadas puede ser intensivo en recursos y afectar el rendimiento del servicio.
Se eliminó la limitación de cinco millones de caracteres de entrada.
truncatewords¶Trunca una cadena después de un número determinado de palabras.
Argumento: Número de palabras a truncar después
Ejemplo:
{{ value|truncatewords:2 }}
Si el valor es "Joel es un gusano", la salida será "Joel es …".
Se eliminarán las líneas en blanco dentro de la cadena.
truncatewords_html¶Similar a truncatewords, excepto que está consciente de etiquetas HTML. Cualquier etiqueta que se abra en la cadena y no se cierre antes del punto de truncación, se cierra inmediatamente después de la truncación.
Esto es menos eficiente que truncatewords, por lo que solo debe usarse cuando se le pasa texto HTML.
Ejemplo:
{{ value|truncatewords_html:2 }}
Si el valor es "<p>Joel es un gusano</p>", la salida será "<p>Joel es …</p>".
Se preservarán los saltos de línea en el contenido HTML.
Tamaño de la cadena de entrada
Procesar cadenas HTML grandes y potencialmente malformadas puede ser intensivo en recursos y afectar el rendimiento del servicio.
Se eliminó la limitación de cinco millones de caracteres de entrada.
unordered_list¶Toma recursivamente una lista auto-nestada y devuelve una lista HTML no ordenada – SIN abrir ni cerrar etiquetas <ul>.
La lista se asume que está en el formato correcto. Por ejemplo, si var contiene ['Estados', ['Kansas', ['Lawrence', 'Topeka'], 'Illinois']], entonces {{ var|unordered_list }} devolvería:
<li>States
<ul>
<li>Kansas
<ul>
<li>Lawrence</li>
<li>Topeka</li>
</ul>
</li>
<li>Illinois</li>
</ul>
</li>
mayúsculas¶Convierte una cadena en mayúsculas todas.
Ejemplo:
{{ value|upper }}
Si value es "Joel es un gusano", la salida será "JOEL ES UN GUSANO".
urlencode¶Escapa un valor para su uso en una URL.
Ejemplo:
{{ value|urlencode }}
Si value es "https://www.example.org/foo?a=b&c=d", la salida será "https%3A//www.example.org/foo%3Fa%3Db%26c%3Dd".
Se puede proporcionar un argumento opcional que contiene los caracteres que no deben escaparse.
Si no se proporciona, se asume que el carácter “/” es seguro. Puede proporcionar una cadena vacía cuando todos los caracteres deben escaparse. Por ejemplo:
{{ value|urlencode:"" }}
Si value es "https://www.example.org/", la salida será "https%3A%2F%2Fwww.example.org%2F".
urlizar¶Convierte URLs y direcciones de correo electrónico en texto en enlaces clicables.
Esta etiqueta de plantilla funciona con enlaces prefijados con http://, https:// o www.. Por ejemplo, https://djangocon.eu se convertirá pero djangocon.eu no lo hará.
También admite enlaces de dominio solo que terminan en uno de los dominios de nivel superior original (.com, .edu, .gov, .int, .mil, .net y .org). Por ejemplo, djangoproject.com se convertirá.
Los enlaces pueden tener puntuación final (puntos, comas, paréntesis cerrados) y puntuación inicial (paréntesis abiertos), y urlize hará las cosas bien de todos modos.
Los enlaces generados por urlize tienen un atributo rel="nofollow" agregado a ellos.
Ejemplo:
{{ value|urlize }}
Si value es "Mira www.djangoproject.com", la salida será "Mira <a href="http://www.djangoproject.com" rel="nofollow">www.djangoproject.com</a>".
Además de los enlaces web, urlize también convierte direcciones de correo electrónico en enlaces mailto:. Si value es "Envía preguntas a foo@example.com", la salida será "Envía preguntas a <a href="mailto:foo@example.com">foo@example.com</a>".
La etiqueta de filtro urlize también admite un parámetro opcional autoescape. Si autoescape es True, el texto del enlace y las URLs se escaparán utilizando la función de escape incorporada de Django: escape. El valor predeterminado para autoescape es True.
Nota
Si urlize se aplica a texto que ya contiene marcado HTML, o a direcciones de correo electrónico que contienen comillas simples ('), las cosas no funcionarán como se espera. Aplicar esta etiqueta solo a texto plano.
urlizetrunc¶Convierte las direcciones URL y los correos electrónicos en enlaces clickeables de la misma manera que urlize_, pero trunca las direcciones URL más largas que el límite de caracteres dado.
Argumento: Número de caracteres que el texto enlazado debería ser truncado a, incluyendo la elipsis que se agrega si es necesario la truncación.
Ejemplo:
{{ value|urlizetrunc:15 }}
Si value es «Check out www.djangoproject.com», el resultado sería “Check out <a href=»http://www.djangoproject.com» rel=»nofollow»>www.djangoproj…</a>”.
Con la misma lógica que urlize_, esta función de filtro debe aplicarse solo a texto plano.
Devuelve el número de palabras.
Ejemplo:
{{ value|wordcount }}
Si value es "Joel es un gusano", la salida será 4.
Envuelve palabras a la longitud de línea especificada.
Argumento: número de caracteres a partir del cual se debe hacer un salto de línea en el texto.
Ejemplo:
{{ value|wordwrap:5 }}
Si value es Joel es un slug, el resultado sería:
Joel
is a
slug
sí/no¶Los valores de los mapas para True, False y (opcionalmente) None, se traducen a las cadenas «sí», «no», «tal vez» o una mapeación personalizada pasada como una lista separada por comas, y devuelve uno de esos strings según el valor:
Ejemplo:
{{ value|yesno:"yeah,no,maybe" }}
Valor |
Argumento |
Salidas |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
«Sí, no» |
«No» (convierte «None» a «Falso» si no se da una mapeación para «None») |
Django proporciona etiquetas y filtros de plantilla para controlar cada aspecto de la internacionalización en las plantillas. Permiten un control granular de las traducciones, el formato y las conversiones de zona horaria.
Esta biblioteca permite especificar texto translatable en las plantillas. Para habilitarlo, establece USE_I18N a Verdadero, luego carga con {% load i18n %}.
Vea especificando-cadenas-de-traducción-en-el-código-del-plantilla.
Esta biblioteca proporciona control sobre la localización de valores en las plantillas. Solo necesitas cargar la biblioteca utilizando {% load l10n %}.
Vea tema-l10n-plantillas.
tz¶Esta biblioteca proporciona control sobre las conversiones de zona horaria en plantillas. Al igual que l10n, solo necesitarás cargar la biblioteca con {% load tz %}, pero usualmente también establecerás USE_TZ a True para que la conversión al tiempo local suceda por defecto.
Django viene con un par de otras bibliotecas de etiquetas de plantilla que debes habilitar explícitamente en tu configuración INSTALLED_APPS y habilitar en tu plantilla con la etiqueta {% load %}.
django.contrib.humanize¶Un conjunto de filtros de plantillas Django útiles para agregar un «toque humano» a los datos. Vea django.contrib.humanize.
static¶static¶Para enlazar archivos estáticos que se guardan en STATIC_ROOT Django viene con la etiqueta de plantilla static. Si el paquete django.contrib.staticfiles está instalado, la etiqueta servirá los archivos utilizando el método url() del almacenamiento especificado por staticfiles en STORAGES. Por ejemplo:
{% load static %}
<img src="{% static 'images/hi.jpg' %}" alt="Hi!">
También es capaz de consumir variables de contexto estándar, p. ej., asumiendo una variable user_stylesheet se pasa a la plantilla:
{% load static %}
<link rel="stylesheet" href="{% static user_stylesheet %}" media="screen">
Si deseas recuperar una URL estática sin mostrarla, puedes utilizar un llamado ligeramente diferente:
{% load static %}
{% static "images/hi.jpg" as myphoto %}
<img src="{{ myphoto }}" alt="Hi!">
Usando plantillas de Jinja2?
Consulte la clase ~django.template.backends.jinja2.Jinja2 para obtener información sobre el uso del etiqueta static con Jinja2.
Deberías preferir la etiqueta de plantilla static, pero si necesitas más control sobre exactamente dónde y cómo se inyecta STATIC_URL en la plantilla, puedes usar la etiqueta de plantilla get_static_prefix:
{% load static %}
<img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!">
También hay una segunda forma que puedes utilizar para evitar procesamiento adicional si necesitas el valor varias veces:
{% load static %}
{% get_static_prefix as STATIC_PREFIX %}
<img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi!">
<img src="{{ STATIC_PREFIX }}images/hi2.jpg" alt="Hello!">
Similar a la get_static_prefix, get_media_prefix puebla una variable de plantilla con el prefijo de medios MEDIA_URL, por ejemplo:
{% load static %}
<body data-media-url="{% get_media_prefix %}">
Al almacenar el valor en un atributo de datos, nos aseguramos de que esté escapado apropiadamente si queremos utilizarlo en un contexto JavaScript.
addaddslashescapfirstdatedefaultdefault_if_nonedictsortdictsortreverseddivisiblebyescapeescapejsescapeseqfilesizeformatfirstfloatformatforce_escapeget_digitiriencodejoinjson_scriptúltimolongitudsaltos_de_línealinebreaksbrlinenumbersljustlowermake_listphone2numericpluralizepprintrandomrjustsafesafeseqsliceslugifystringformatstriptagshoratiempo hastatítulotruncarcaracterestruncatechars_htmltruncatewordstruncatewords_htmlunordered_listmayúsculasurlencodeurlizarurlizetruncsí/nomay 31, 2026