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

M. Ryan
fonte

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 }}
Daniel Roseman
fonte
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 %}
Mark Lavin
fonte
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


fonte
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 }}
RealScatman
fonte