2010-11-26 38 views
18

me pase un diccionario a mi plantilla de Django,Django plantillas primer elemento de una lista

Diccionario & plantilla es así -

lists[listid] = {'name': l.listname, 'docs': l.userdocs.order_by('-id')} 

{% for k, v in lists.items %} 
    <ul><li>Count: {{ v.docs.count }}, First: {{ v.docs|first }}</li></ul> 
{% endfor %} 

Ahora docs es una lista de userdocs tipo. es decir, es una instancia. Entonces el filtro first me devuelve esta instancia. De esto necesito extraerlo es id. ¿Cómo puedo hacer eso?

Probé {{ v.docs|first }}.id y varias otras pruebas inútiles.

Respuesta

44

Puede usar la etiqueta de plantilla {% with %} para este tipo de cosas.

{% with v.docs|first as first_doc %}{{ first_doc.id }}{% endwith %} 
+7

hackeado alrededor & encontré una alternativa, dime si esta es una mala práctica - '{{v.movies.0.doc.id}}' –

+0

He descartado mi enfoque anterior, es decir, no 'primer' filtro, etc ... –

5

No sé si esto es útil ..

Lo que se quiere es el primer valor de un iterables (v.docs) y se la iteración del otro encapsular iterable (listas).

Para el conteo, yo haría lo mismo, pero para el primer elemento ... iteraría sobre los v.docs individualmente y recuperaría el primer valor a través de un bucle interno.

{% for doc in v.docs %} 
    {% if v.docs | first %} 
    <li>doc</li> 
    {% endif %} 
{% endfor %} 

Nota: el primer filtro se aplica a v.docs, no a doc. Sí. Se trata de otro bucle :(

+0

gracias, tengo esto s olved es bueno tener otro enfoque. podría ayudar a otros ... –

21

Puede probar esto:.

{{ v.docs.0 }} 

Como arr.0

Puede obtener elementos de índice (0, 1, 2, etc.)

+0

Gracias por una respuesta genérica. Lo necesitaba primero y segundo;) –

Cuestiones relacionadas