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.

Respostas:



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 ^ _ ^


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.