Django Templating: como acessar propriedades do primeiro item em uma lista


88

Bem simples. Eu tenho uma lista de Python que estou passando para um modelo Django.

Posso acessar especificamente o primeiro item desta lista usando

{{ thelist|first }}

No entanto, também quero acessar uma propriedade desse item ... idealmente, você pensaria que seria assim:

{{ thelist|first.propertyName }}

Mas, infelizmente, isso não acontece.

Existe alguma solução de template para isso, ou irei me pegar passando uma variável de template extra ...

Respostas:


182

Você pode acessar qualquer item em uma lista por meio de seu número de índice. Em um modelo, isso funciona da mesma forma que qualquer outra pesquisa de propriedade:

{{ thelist.0.propertyName }}

Hmm. isso não funciona com um inline_admin_formset no entanto. Eu acho que o iterador não funciona como eu esperava.
Shayne

Olá Daniel, Você poderia verificar minha pergunta relacionada ao template / view stackoverflow.com/questions/34791375/… ?
Sathish de

Isso é muito melhor do que um forloop para percorrer cada uma das mensagens de erro. Obrigado!
IIllIIll

1
E thelist.-1.propertyNamepara o último item?
Asqiir

1
Não, isso não funcionaria, infelizmente, Django não pode analisar isso. Você precisaria usar a withtag junto com |last, como sugere Mark na outra resposta.
Daniel Roseman

33

Você pode combinar a withtag de modelo com o firstfiltro de modelo para acessar a propriedade.

{% with thelist|first as first_object %}
    {{ first_object.propertyname }}
{% endwith %}

1
Para um dicionário, primeiro retorna uma tupla para o par chave / valor, é um pouco feio, mas adicionei outra instrução com para obter apenas os valores. {% with thelist | first as first_object%} {% with first_object.1 as object%} {{object}} {% endwith%} {% endwith%}
Matthew Purdon

21

Se você estiver tentando acessar um campo muitos a muitos, lembre-se de adicionar all, para que pareçaobject.m2m_field.all.0.item_property


1
Poderia te dar +10 mencionando "todos", você salvou meu dia;)
cwhisperer

0

uma resposta / sintaxe potencialmente mais clara para acessar uma propriedade ManyToManyField em uma lista de objetos fornecida para o modelo django ficaria assim:

{{ object_list.0.m2m_fieldname.all.0.item_property }}
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.