¿Elemento de lista de referencia por índice dentro de la plantilla de Django?


107

Esto puede ser simple, pero miré a mi alrededor y no pude encontrar una respuesta. ¿Cuál es la mejor manera de hacer referencia a un solo elemento en una lista de una plantilla de Django?

En otras palabras, ¿cómo hago el equivalente {{ data[0] }}dentro del lenguaje de la plantilla?

Gracias.

Respuestas:



76

Una mejor manera: filtro de plantilla personalizado: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

como obtener my_list [x] en plantillas:

en plantilla

{% load index %}
{{ my_list|index:x }}

templatetags / index.py

from django import template
register = template.Library()

@register.filter
def index(indexable, i):
    return indexable[i]

si my_list = [['a','b','c'], ['d','e','f']], puede usar {{ my_list|index:x|index:y }}en la plantilla para obtenermy_list[x][y]

Funciona bien con "para"

{{ my_list|index:forloop.counter0 }}

Probado y funciona bien ^ _ ^


1
¡Una de las explicaciones más sencillas para aprender la aplicación Template Tags!
vanguard69

5
¡Esto fue genial! Pero con el formato {{List | index: x}}, ¿cómo accedo a valores donde normalmente usaría un punto? {{(List | index: x) .name}} obviamente no funciona. ¡Gracias!
JTFouquier

Exactamente lo que estaba buscando. ¡Gracias!
Grant Bartel

Tengo una matriz en la que no estoy seguro del índice de mi valor deseado{% for id in article_details.heading.contents.article_ids %} {% if id.type == 'DOI' %} {{ article_details.heading.contents.article_ids.forloop.counter0.value }} {% endif %} {% endfor %}
Akin Hwan

Estoy iterando a través de una lista (coincidencias), mientras que iterando tengo otra lista donde quiero usar el índice (counter0), probé {{matchTeamEmblems.forloop.counter0.homeTeamID}} pero no funciona, el matchTeamEmblems es una lista Genero en simple_tag que crea una URL (estática ...) para mis emblemas pero no puedo acceder a ellos
kaya

24

{{ data.0 }} Deberia trabajar.

Digamos que escribió data.objdjango tries data.objy data.obj(). Si no funcionan, lo intenta data["obj"]. En su caso data[0]se puede escribir como {{ data.0 }}. Pero te recomiendo que ingreses data[0]la vista y la envíes como una variable separada.


1

@ jennifer06262016, definitivamente puedes agregar otro filtro para devolver los objetos dentro de un Queryset de django.

@register.filter 
def get_item(Queryset):
    return Queryset.your_item_key

En ese caso, escribiría algo como esto {{Queryset | index: x | get_item}} en su plantilla para acceder a algún objeto de diccionario. Esto funciona para mi.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.