¿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.

usuario456584
fuente

Respuestas:

184

Parece que {{ data.0 }}. Consulte Variables y búsquedas .

Mike DeSimone
fuente
47
Lo molesto es que no puedo decir {{ data.foo }}dónde fooestá una variable con un valor de índice y no un nombre de propiedad.
Mike DeSimone
1
Si está dispuesto a crear una etiqueta personalizada, puede hacer mucho más. Aquí solo estamos trabajando con las cosas integradas.
Mike DeSimone
El enlace ya no funciona, pruebe este: docs.djangoproject.com/en/1.10/ref/templates/api/…
Speccy
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 ^ _ ^

WeizhongTu
fuente
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.

yilmazhuseyin
fuente
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.

Kendrick Fong
fuente