Lista de referência item por índice dentro do template Django?

107

Pode ser simples, mas olhei em volta e não consegui encontrar uma resposta. Qual é a melhor maneira de fazer referência a um único item em uma lista de um modelo Django?

Em outras palavras, como faço o equivalente {{ data[0] }}no idioma do modelo?

Obrigado.

user456584
fonte

Respostas:

184

Parece {{ data.0 }}. Veja Variáveis ​​e pesquisas .

Mike DeSimone
fonte
47
O chato é que não sei dizer {{ data.foo }}onde fooestá uma variável com um valor de índice e não um nome de propriedade.
Mike DeSimone
1
Se você deseja criar uma tag personalizada, pode fazer muito mais. Aqui, estamos apenas trabalhando com o material integrado.
Mike DeSimone,
O link não está mais funcionando, tente este aqui: docs.djangoproject.com/en/1.10/ref/templates/api/…
Speccy
76

Uma maneira melhor: filtro de modelo personalizado: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

como get my_list [x] em modelos:

no modelo

{% 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]

se my_list = [['a','b','c'], ['d','e','f']], você pode usar {{ my_list|index:x|index:y }}em um modelo para obtermy_list[x][y]

Funciona bem com "para"

{{ my_list|index:forloop.counter0 }}

Testado e funciona bem ^ _ ^

WeizhongTu
fonte
1
Uma das explicações mais simples para aprender a aplicar as tags de modelo!
vanguard69
5
Isso foi ótimo! Mas com o formato {{List | index: x}}, como faço para acessar valores onde normalmente usaria um ponto? {{(List | index: x) .name}} obviamente não funciona. Obrigado!
JTFouquier 01 de
Exatamente o que eu estava procurando. Obrigado!
Grant Bartel
Tenho uma matriz na qual não tenho certeza do índice do meu valor desejado{% 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
Estou iterando por meio de uma lista (correspondências), enquanto iterando, tenho outra lista onde desejo usar o índice (contador0), tentei {{matchTeamEmblems.forloop.counter0.homeTeamID}} mas não funciona, o matchTeamEmblems é uma lista eu gero em simple_tag que cria uma URL (estática ..) para meus emblemas, mas não consigo acessá-los
kaya
24

{{ data.0 }} Deveria trabalhar.

Digamos que você escreveu data.objtentativas de django data.obje data.obj(). Se eles não funcionarem, ele tenta data["obj"]. No seu caso, data[0]pode ser escrito como {{ data.0 }}. Mas eu recomendo que você puxe data[0]a visualização e envie-a como uma variável separada.

yilmazhuseyin
fonte
1

@ jennifer06262016, você pode definitivamente adicionar outro filtro para retornar os objetos dentro de um Queryset django.

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

Nesse caso, você digitaria algo como este {{Queryset | index: x | get_item}} em seu modelo para acessar algum objeto de dicionário. Funciona para mim.

Kendrick Fong
fonte